PDA

View Full Version : مشکل یا tstrings



lord_viper
سه شنبه 14 آبان 1387, 20:07 عصر
با سلام
من یه یونیت نوشتم که به خوبی کار میکنه حالا باید اونو به dll تبدیل کنم داخل یونیت یه procedure به صورت


procedure allname(var list:tstrings);

هست که وقتی به لیست exports اضافش میکنم بعد از کامپایل تو برنامه listbox.items رو بهش میدم تا اطلاعاتو ازش بگیرم ولی هیچ اتفاقی نمیافته
(یونیت sharemem هم به uses اضافه شده است)

Ahmad Chehreghani
سه شنبه 14 آبان 1387, 21:54 عصر
سلام

var را از کدت حذف کني درست مي شه!

lord_viper
چهارشنبه 15 آبان 1387, 07:03 صبح
فکر نکنم به خاطر var باشه چون خیلی باهاش ور رفتم و کدهای زیادی رو امتحان کردم مشکل احتمالا باید از چیز دیگهای باشه

lord_viper
چهارشنبه 15 آبان 1387, 08:40 صبح
مشکلم از stdcall بود که در اخر تابع گزاشته بودم


procedure allname(list:tstrings);stdcall;

از این dll قراره در vb6 استفاده بشه ایا بدون اسفاده از این اعلانات مشکلی در استفاده از dll در اون زبان پیش نمیاد؟

Ahmad Chehreghani
چهارشنبه 15 آبان 1387, 09:31 صبح
stdcall براي موقعي هستش که تابعت بخواد بطور استاندارد فراخاني بشه.

يکمي وقتم آزاد شده، بزار سعي مي کنم يه مقاله دربارش بنويسمD:

vcldeveloper
چهارشنبه 15 آبان 1387, 17:14 عصر
برای هر زبانی باید از Calling Convention ایی که پشتیبانی میکنه استفاده کنید. Stdcall یک Calling Convetion هست که ویندوز برای APIهای خودش استفاده میکنه، و کامپایلرهای تحت ویندوز ازش پشتیبانی می کنند.


از این dll قراره در vb6 استفاده بشه ایا بدون اسفاده از این اعلانات مشکلی در استفاده از dll در اون زبان پیش نمیاد؟
مشکل اصلی تابع مورد نظر شما اینه که میخواد با یک کلاسی به عنوان پارامتر کار کنه که مختص دلفی هست؛ یعنی این کلاس در vb6 وجود نداره. حتی اگر کلاسی با همین نام و همین کاربرد در vb6 وجود داشته باشه، دلفی و VB از روش های متفاوتی برای مدیریت اشیاء در حافظه استفاده می کنند، پس نمی تونید یک TStrings را از دلفی به VB یا از VB به دلفی از طریق این DLL منتقل کنید. باید از نوع های داده ایی استفاده کنید که هر دو آنها پشتیبانی می کنند.