DLL

واستدعائه بدلفي

بسم الله الرحمن الرحيم

و الصلاة و السلام على رســـول الله

كيفية انشاء ملف DLL بـــ Delphi
واستدعائه بــــبرنامج دلفي Delphi

المشروع أي انشاء مشروع جديد
fichier -> nouveau -> application -> ok

------------------------

Code:
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;

-----------------------------

Code:
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.

النهاية

نستطيع كتابة دالة أو اثنان أو  أكثر أو حتي اجراءات متعددة

في حالة تعدد الاجراءات والدوال

Code:
function addition(a1,b1: integer): integer; stdcall;
begin

result := a1+b1;

end;
Code:
function soustraction(x:integer; y: integer): integer;

result := x-y;

end;
Code:
procedure max(k: integer; j: integer; var m: integer)

begin

if k > j then m:=k else m:=j;

end;

هذه طريقة تصدير الى البرامج المستدعية أي التي تستدعي هذه الدوال والاجراءات ونفصل بينها فاصلة

exports addition, soustraction, max;

Code:
library Project1;

uses SysUtils, Classes;

{$R *.res}

function Addition(a1,b1: integer): integer; stdcall;
begin
  Addition := a1+b1;
end;
 exports  Addition;

begin
end.