- الكود:
-
library Project1;
uses SysUtils, Classes;
{$R *.res}
function Addition(a1,b1: integer): integer;
begin
Addition := a1+b1;
end;
exports Addition;
begin
end.
---------------------------------------------------------
دلفي تعليم
http://delph.forumalgerie.net
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;
ساشرح في موضوع آخر طريقة الارسال باسم او مؤشر name - index
.