DLL
واستدعائه بدلفي
بسم الله الرحمن الرحيم
و الصلاة و السلام على رســـول الله
كيفية انشاء ملف DLL بـــ Delphi
واستدعائه بــــبرنامج دلفي Delphi
المشروع أي انشاء مشروع جديد
fichier -> nouveau -> application -> ok
------------------------
unit Unit01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
function Addition(a1,b1: integer): integer; stdcall;
external 'TestDLL1.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: integer;
j: integer;
begin
x := StrToInt(Edit1.Text);
y := StrToInt(Edit2.Text);
j := Addition(x, y);
Label1.Caption := IntToStr(j);
end;
end.
----------------------------------
procedure Button1Click(Sender: TObject);
في السطر الاول تم تصريح باجراء النقر هو من نوع كائن وتتم كتابته تلقائيا
private { Déclarations privées }
منطقة لتصريح المخصص أي تصريح لبعض المتغييرات أو الاجراءات
public { Déclarations publiques }
منطقة لتصريح العام أي تصريح بعض المتغييرات أو الاجراءات
function Addition(a1,b1: integer): integer; stdcall; external 'TestDLL1.dll';
تصريح بالدالة المستعملة في البرنامج
implementation {$R *.dfm}
نهاية منطقة التصريح وبداية منطقة كتابة الاوامر أي جسم البرنامج
procedure TForm1.Button1Click(Sender: TObject);
بداية اجراء النقر
var
x, y: integer;
j: integer;
تصريح بثلاثة متغييرات من نوع صحيح داخل الاجراء
begin
بداية جسم الاجراء
x := StrToInt(Edit1.Text);
اسناد القيمة المدخلة في مربع النص الى المتغيير صحيح وذلك بعد تحويلها من سلسلة حرفية الى عدد صحيح
y := StrToInt(Edit2.Text);
عملية اسناد كسابقه أي نفس شيء
Label1.Caption := IntToStr(j);
اسناد قيمة المتغيير الى لافتة كابشن لابل الاول وذلك بعد عملية التحويل من متغيير الى سلسلة حرفية
end;
end.
نهاية الاجراء ونهاية البرناج في نفس الوقت
...
fichier -> nouveau -> export dll -> ok
ملف دي ال ال
Liprary مكتبة
stdcall;
-----------------------------
library TestDLL1;
uses SysUtils, Classes;
{$R *.res}
function Addition(a1,b1: integer): integer; stdcall;
begin
Addition := a1+b1;
end;
exports Addition;
begin
end.
-----------------
سأحاول شرح هذه الاوامر
Liprary TestDLL1;
المكتبة وهذه المكتبة لها اسم معين
begin
البداية
tesult := a1+b1;
اسناد نتيحة عملية الجمع الى الدالة أو الى اسم الدالة
exports Addition;
تصدير الدالة الى خارج المكتبة من أجل استعمالها في برامج أخرى
end.
النهاية
نستطيع كتابة دالة أو اثنان أو أكثر أو حتي اجراءات متعددة
في حالة تعدد الاجراءات والدوال
function addition(a1,b1: integer): integer; stdcall; begin result := a1+b1; end;
function soustraction(x:integer; y: integer): integer; result := x-y; end;
procedure max(k: integer; j: integer; var m: integer) begin if k > j then m:=k else m:=j; end;
هذه طريقة تصدير الى البرامج المستدعية أي التي تستدعي هذه الدوال والاجراءات ونفصل بينها فاصلة
exports addition, soustraction, max;
library Project1;
uses SysUtils, Classes;
{$R *.res}
function Addition(a1,b1: integer): integer; stdcall;
begin
Addition := a1+b1;
end;
exports Addition;
begin
end.