PDA

View Full Version : سوال: نحوه استفاده یک فانکشن در خود دی ال ال



nsco_nsco
شنبه 02 بهمن 1389, 06:59 صبح
سلام دوستان
یک سوال داشتم می خواستم ببینم اگر ما یک فانکشن بسازیم و بعد بخوایم این فانکشن رو در خود دی ال ال صدا کنیم و از خروجیش استفاده کنیم چطوری باید این کار رو کنیم به این مثال توجه کنید:



library Project1;



uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
StrUtils,
ExtCtrls,
ComCtrls,
TabNotBk,
HTTPApp,
ColorGrd,
DateUtils,
SimpleShareMem,
Math;

{$R *.res}
VAR
S1:STRING ;





function SayWelcome: string;

begin

S1:= formatdatetime('HH:MM:SS',time);
Result := S1;
end;

exports
SayWelcome;
begin
end.




من می خوام این فانکشن که به نام SayWelcome هست را در یک فانکشن دیگر صدا کنم و در یک متغییر بریزم و از متغییر برای یک چند دستور شرطی استفاده کنم ممنون می شم سریع جواب بدید ممنون :تشویق::لبخند::چشمک::قلب:

ashoori
شنبه 02 بهمن 1389, 09:23 صبح
var
Form1: TForm1;

function SayWelcome:string; external 'Project1.dll'

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject) ;
begin
SayWelcome;
end;

nsco_nsco
شنبه 02 بهمن 1389, 23:41 عصر
سلام ممنون از جوابتون
ولی من می خوام این رو در خود دی ال ال فراخوانی کنم اگر ممکنه توضیح بدید با تشکر :قلب:

nsco_nsco
یک شنبه 03 بهمن 1389, 01:49 صبح
سلام دوستان
امشب کسی از دوستان نیست این سوال رو جواب بده راستی یک توضیح بدم من می خوام این SayWelcome رو در یک متغییر در یک فانکشن دیگه مقدارش رو صدا کنم و البته بگم این صدا کردن در خود دی ال ال هست نه در فایل اگزه ممنون می شم بهم بگید با تشکر.:قلب:

Felony
یک شنبه 03 بهمن 1389, 10:19 صبح
سلام ممنون از جوابتون
ولی من می خوام این رو در خود دی ال ال فراخوانی کنم اگر ممکنه توضیح بدید با تشکر :قلب:
داخل DLL یعنی چی ؟ خوب هر جای لازمش دارید صداش بزنید ، اگر میخواین وقتی DLL بارگذاری شد این کار رو انجام بدید باید برای DLL تو یک EntryPoint بنویسید :


procedure EntryPoint(Event: DWord);
begin
case Event of
DLL_PROCESS_ATTACH : SayWelcome;
DLL_PROCESS_DETACH : {On Free DLL Module Event};
end;
end;

و تو DLL به صورت زیر قرارش بدید :

library Project1;



uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
StrUtils,
ExtCtrls,
ComCtrls,
TabNotBk,
HTTPApp,
ColorGrd,
DateUtils,
SimpleShareMem,
Math;

{$R *.res}

VAR
S1:STRING ;

function SayWelcome: string;
begin
Result:= formatdatetime('HH:MM:SS',time);
end;

procedure EntryPoint(Event: DWord);
begin
case Event of
DLL_PROCESS_ATTACH : S1:= SayWelcome;
DLL_PROCESS_DETACH : {Free your datamodule instance here};
end;
end;

exports
SayWelcome;
begin
Dllproc := @EntryPoint;
EntryPoint(DLL_PROCESS_ATTACH);
end.

اون EntryPoint مثل 2 تا رویداد عمل میکنه ، DLL_PROCESS_ATTACH زمانی که یک برنامه یا ... DLL رو تو حافظه بار کرد احرا میشه و DLL_PROCESS_DETACH زمانی که ماژول آزاد شد .