View Full Version : متن در DLL
DAMAVAND
پنج شنبه 04 مهر 1387, 06:09 صبح
سلام
دوستان کسي ميدونه چجوري ميشه يه متن رو ,منظورم يک صفحه متن رو تو يه DLL ذخيره کرد ?????
و بعد از اون تو برنامه استفاده کرد ? ! ? يعني اون رو از توي DLL داخل برنامه مثلا داخل memo لود کرد ?
با تشکر.
vcldeveloper
پنج شنبه 04 مهر 1387, 07:37 صبح
مشکل دقیقا چیه؟ خوندن یک مقدار از DLL؟ خوندن متن یا عدد فرقی با هم نداره، غیر از اینکه برای string باید دقت کنید که یونیت های مروبط به مدیرحافظه دلفی اول uses هر دو پروژه اومده باشه.
DAMAVAND
پنج شنبه 04 مهر 1387, 20:28 عصر
نه مشکل اينجاست که چه جوري يه متن رو تو DLL ذخيره کنم و بعد از اون استفاده کنم. در واقع بايد به صورت يه Tstring ذخيره بشه فرض کنيد يک صفحه متن رو ميخواهيم تو DLL ذخيره کنيم مثلا همين متن که نوشتم رو تو DLL بزاريم.و تو برنامه اون رو از DLL لود کنيم !
مشکلي با کار با String ندارم ولي وقتي يه چيزي مثل متن باشه بايد از Tstring استفاده کرد ولي نميدونم چه جوري اين کار رو تو بکنم ?
با تشکر
دنیای دلفی
پنج شنبه 04 مهر 1387, 22:57 عصر
خوب به صورت يك متغيير WideString به صورت ثابت در دي ال ال بنويسش سپس به صورت RunTime
Tstring را بساز و استفاده كن . مشكل خاصي نداري فقط موقعي كه مي خواهي بفرستي حتما به صورت Pchar يا shortstring استفاده كنيد .
vcldeveloper
جمعه 05 مهر 1387, 16:29 عصر
مشکلي با کار با String ندارم ولي وقتي يه چيزي مثل متن باشه بايد از Tstring استفاده کرد ولي نميدونم چه جوري اين کار رو تو بکنم ?
مهم نیست، string محدودیت طول نداره، هر وقت هم خواستید می تونید آن را در یک TStringList لود کنید.
DAMAVAND
شنبه 20 مهر 1387, 05:00 صبح
دوستان اين کد رو نگاه کنيد.
ميخوام item هاي listbox رو که توي فرم DLL هست رو تو برنامم لود کنم ولي خطا ميده !
اشکال کارم از کجاست ?
با تشکر.
vcldeveloper
شنبه 20 مهر 1387, 10:21 صبح
دوستان اين کد رو نگاه کنيد.
ميخوام item هاي listbox رو که توي فرم DLL هست رو تو برنامم لود کنم ولي خطا ميده !
مشکلش اینه که DLL و EXE هر کدوم فضای Heap مخصوص به خودشون رو نگهداری می کنند. در این شرایط عملگرهایی مثل Is یا As درست عمل نمی کنند.
در کد شما وقتی GetList به ListBox1.Items نسبت داده میشه، متد Assigned مربوط به Items فراخوانی میشه. این متد با استفاده از عملگر Is بررسی میکنه که آیا کلاس نسبت داده شده TStrings هست یا نه، ولی بخاطر مطلبی که در بالا به آن اشاره کردم، از تشخیص درست نوع کلاس عاجز میشه، پس شرط مربوطه درست از آب در نمیاد، نتیجه اش هم این میشه که متد Assigned کلاس والد فراخوانی میشه، و اون متد یک Exception بر میگردونه که بگه این دو کلاس با هم تطابق ندارند.
وقتی از DLL استفاده می کنید، باید سعی کنید تا حد امکان مستقیما شی ایی را بین DLL و EXE منتقل نکنید. اگر این کار را بکنید، در برخی مواقع جواب می گیرید، در برخی مواقع هم با مشکل مواجه میشید. اگر واقعا لازم هست که یک شی به ماجول دیگه ایی منتقل بشه، بهتر هست از Package بجای DLL استفاده کنید. اگر قرار هست این کار بین زبان های برنامه نویسی مختلف انجام بشه (مثلا کلاسی که در دلفی ساخته شده در ++C استفاده بشه)، اون وقت باید برید سراغ COM.
در این یک مورد میشه با نوشتن کد به شکل زیر مشکل را برطرف کرد:
ListBox1.Items.Text := GetList.Text;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.