PDA

View Full Version : DLL در دلفی



Future
یک شنبه 08 آبان 1384, 11:23 صبح
سلام دوستان
من یک dll نوشتم ولی وقتی در برنامه از اون استفاده می کنم پیغام خطا زیر را می دهد
invalid pointer operation
لطفا مرا راهنمایی کنید

vcldeveloper
دوشنبه 09 آبان 1384, 03:14 صبح
اگه DLL را با دلفی نوشتید، می تونید از طریق IDE دلفی در زمان اجرای برنامه، اون DLL را دیباگ کنید و محل وقوع خطا را پیدا کنید.

JavanSoft
دوشنبه 09 آبان 1384, 14:16 عصر
فکر می کنم شما فرم مادر را مشخص نکرده اید ...در هر صورت از مقاله DLL در سایت ModiranGroup.Com یک بازدیدی بکن شاید بدردت بخوره

Naficy
چهارشنبه 11 آبان 1384, 05:47 صبح
خدا می داند این خطا از چند جای مختلف می تونه باشه. کمی بیشتر در مورد زمان رخداد خطا و خود dll و توابع و عملیاتش توضیح دهید.

jalal95
جمعه 04 مرداد 1387, 19:21 عصر
در مورد اين dll يك مقاله فارسي نداريد بزارين از اين دربه دري راحت شيم

vcldeveloper
شنبه 05 مرداد 1387, 00:21 صبح
در مورد اين dll يك مقاله فارسي نداريد بزارين از اين دربه دري راحت شيم
درباره DLL در سایت مطلب زیاد هست:
http://www.google.com/cse?cx=010277259273172057471%3Agbud9yj2nhi&q=DLL+%D8%AF%D9%84%D9%81%DB%8C&cof=FORID%3A11&x=0&y=0

jalal95
شنبه 05 مرداد 1387, 16:33 عصر
علي اقا مدير ارشد شايد باورتون نشه درست يك هفته است من كل سايت شمارو زيرور رو كردم نتونستم جواب سوالمو پيدا كنم سوال من اينه

يك webbowser در برنامه بزاريم و بجاي اينكه به برنامه ادرس سايتو بديم (ادرسي كه داخل webbrowser باز ميشه) يك فايل dll در كنار برنامه بزاريم و ادرس را داخل اون فايل بنويسيم يعني اگه بخواهيم سايتي كه داخل webbrowser باز ميشه رو عوض كنيم فقط اون فايل dll را عوض كنيم و خودبخود سايت هم عوض بشه

بابا بخدا ديگه خسته شدم از بس از اينو واون كمك خواستم و فقط شنيدم كه جستجو كن من قبول دارم تو سايت هست ولي سواد من نميرسه كاملا مطالبو باز كنمو جوابمو از توش دربيارم من تازه دلفي رو شروع كردم خواهشا اگه زحمتي نيست كد داخل فايل dll و كد داخل برنامه اصلي را برام بنويسيد

B-Vedadian
شنبه 05 مرداد 1387, 18:08 عصر
مثال عملي


library Project2;

uses
SysUtils,
Classes;

{$R *.res}
procedure WebsiteAddress(Address: PChar);
begin
StrCopy(Address, 'http://barnamenevis.org/forum')
end;

exports
WebsiteAddress;

begin
end.
نحوه استفاده


procedure TForm1.Button1Click(Sender: TObject);
var
DLL: HMODULE;
WebsiteAddress: procedure(Address: PChar);
Buffer: array[0..255] of Char;
begin
DLL := LoadLibrary('Project2.dll');
if DLL <> 0 then
try
WebsiteAddress := GetProcAddress(DLL, 'WebsiteAddress');
if Assigned(WebsiteAddress) then
begin
WebsiteAddress(Buffer);
Edit1.Text := Buffer;
end;
finally
FreeLibrary(DLL);
end;
end;

چندتا نکته:
1-لحن طلب‏کارانه لحن مناسبي براي صحبت نيست.
2-اگه با اين کار ميخوايد که امنيت رشته آدرس وبسايت رو بالا ببريد، اصلا کارآمد نيست.
3-در استفاده از dllها، موقع کار با حافظه مراقب باشيد. بافرها به موقع تخصيص داده بشه و به موقع آزاد بشه.
4-رشته‏ها(AnsiString و WideString) و همچنين آرايه‏هاي ديناميک(x:array of y)، براي انتقال بين دو تا تصوير اجرايي مناسب نيستند (مثلا بين dll و برنامه اجرايي)

اگه خواستيد توابع ديگه‏اي هم تعريف کنيد، روش همينه. فقط اسمشو تو بخش exports بياريد.

vcldeveloper
یک شنبه 06 مرداد 1387, 02:45 صبح
شايد باورتون نشه درست يك هفته است من كل سايت شمارو زيرور رو كردم نتونستم جواب سوالمو پيدا كنم
مشکل اکثر دوستان این هست که یک سوال چند وجهی دارند، و انتظار دارند در یک تاپیک به تمام آنها یکجا پرداخته شده باشه، یعنی؛ تاپیکی که در آن مستقیما درباره چگونگی خواندن آدرس یک سایت از داخل DLL و نمایش آن در یک WebBrowser بحث شده باشه. خب طبیعی هست که احتمال وجود همچین تاپیکی بسیار کم هست. شما باید خودتان سوالتان را به چند بخش تقسیم کنید، و بعد در سایت دنبال جواب هر بخش بگرید. مثلا:
1- چگونه می توان در دلفی یک DLL ایجاد کرد.
2- چگونه می توان از یک DLL در برنامه استفاده کرد.
3- چگونه می توان یک رشته را از DLL به یک برنامه در حال اجرا ارسال کرد.
4- چگونه می توان یک آدرس وب را در WebBrowser نمایش داد.
و...

اگر سوال خود را به فرض مثال به بخش های بالا تقسیم کرده بودید، متوجه می شدید که همه آنها قبلا در سایت بحث شده اند و برایشان راه حل ارائه شده. به فرض هم اگر یکی از راه حل ها را متوجه نشده بودید، می توانستید سوالتان را در همان تاپیک مطرح کنید.

jalal95
یک شنبه 06 مرداد 1387, 17:05 عصر
1-لحن طلب‏کارانه لحن مناسبي براي صحبت نيست.

اگه خواستيد توابع ديگه‏اي هم تعريف کنيد، روش همينه. فقط اسمشو تو بخش exports بياريد.
دوست عزيز لحن من به هيچ وجه طلب كارانه نبود بلكه لحن التماسي بود
همه اين كار هارو انجام دادم ولي وقتي button1 را كليك ميكنم هيچ اتفاقي نمي افته اگر كدها ناقص است لطفا كاملش كنيد در ضمن من هيچ اثري از webbrowser در اين كدها نديدم جايگاه اين webbrowser در داخل اين كدها كجاست و edit1 چيكار ميكنه
باز هم من اگه لحنم بدبود معذرت ميخوام اين سايت اميد همه بچه هاي اماتور و حرفه اي در زمينه برنامه نويسي است

B-Vedadian
دوشنبه 07 مرداد 1387, 12:37 عصر
من این کد رو خودم تست کردم. اگه رو فرم یه TButton به نام Button1 و یه TEdit به نام Edit1 بذارید، متن تابع رو هم برای OnClick همون Button1 بذارید، وقتی رو Button1 کلیک کنید، تو Edit آدرس سایت میآد.

دو حالت داره، یا شما تابع Button1Click رو به OnClick مربوط به Button نسبت ندادید، یا فایل project2.dll رو به آدرس پروژه exeی مربوطه کپی نکردید.

در مورد WebBrowser هم باید بگم که ربطی به این موضوع نداره. مقصود یک سورسه که نحوه استفاده از DLLها رو بصورت عملی تو دلفی نشون بده. وقتی آدرس رو داشته باشید، هر کاری که خواستید میتونید باهاش بکنید.

یه نکته هم بگم. دلفی بصورت پیش‏فرض میتونه با array[0..n] of Charها بصورت PChar کارکنه. این یعنی میتونید اونها رو به Stringها هم نسبت بدید.

jalal95
دوشنبه 07 مرداد 1387, 19:03 عصر
اگه خواستيد توابع ديگه‏اي هم تعريف کنيد، روش همينه. فقط اسمشو تو بخش exports بياريد.

من در اين كدها چيزي بنام exports نديدم بايد خودم ايجاد كنم يا از كدها جامونده و ناقص هست چون من همه اون كارهارو انجام دادم وقتي button1راكليك ميكنم تو edit1هيچ اتفاقي نمي افته لطفا كدهارو چك كنيد

B-Vedadian
سه شنبه 08 مرداد 1387, 08:03 صبح
حق با شماست. (الآن اصلاح شده همون پست رو ببینید)
بلافاصله قبل begin و end. بنویسید exports WebsiteAddress;