الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اصنع ملف dll

مغلق
بدأه زكيري عبد العالي في 24 سبتمبر 2001 · 5 رد · 4,492 مشاهدة · في أرشيف منتدى الدلفي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف اصنع ملف dll واضيفه للبرنامج "العاص "الذي انا في طور انجازه بعد استطعت من نزع فيروس blibla و الفيروس sirc32

ب delphi

اريد ان يكون البرنامج دائما مشحن في الداكرة لذى اريد التخلص من الدوال والاجراءات واضعها في ملف dll يتم مناداتها فير ايجاد احد الفيروسات

1-المهم كيف انادي ملف dll من الدلفي

2-لوتكرمت بتوضيح كيفية صنع dll لاني نسيت الطريقة ولم يسبق لي ان كونته الا مرة واحة

اعدكم بتقديم الكود طبعا انكان يهمكم

وفقنا الله

#2

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

اخي العزيز Pati

ان عمليه انشاء ملفات Dll هي عبارة ان علميات برمجيه او اكود برمجيه

تتم بدون ضهور نوافذ تصميميه (كما في عمل اي برنامج عادي)

طبعاً عملية بناء ملفات Dll تعتمد اعتماداً رأيسياً على ال procedure و ال Function

وسأشرح لك الآن طريقه عمل ملفات Dll بشكل مبسط وسأذكر لك امثله تطبيقيه.

اولاً قم بأنشاء ملف Dll

ستضهر لك شاشة الأكواد او البرمجه

وتجدها بهذا الشكل

library Project1;

{ Important note about DLL memory management: ShareMem must be the

first unit in your library's USES clause AND your project's (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }

uses

SysUtils,

Classes;

{$R *.RES}

begin

end.

طبعاً وكما ترى ان الشاشة فارغه من العمليات البرمجيه ( طبعاً الكلام الطويل الي فوق هو مجرد تعليق )

والآن يأتي دورك في عملية البرمجه

طبعاً يلزمك قبل ذلك ان تضيف في Uses مصادر البرمجه المستخدمه في اغراضك البرمجيه

ومن اهم هذه الوحدات التي يجب عليك اضافتها هي Windows, Messages, Forms

وبعدها قم بكتابة ال procedure او ال Function الذي تريد عمله

طبعاً تتم كتابتها بعد

{$R *.RES}

وسأقوم الآن بعمل مثال بسيط للتوضيح

library Project1;

uses

SysUtils,Windows, Messages, Forms,

Classes;

{$R *.RES}

procedure Mes(Tex,Title:string);

begin

application.MessageBox(PChar(Tex),PChar(Title),0);

end;

begin

end.

طبعاً انا قمت في هذا المثال بأزالة التعليق الذي في الأعلى لأنه ليس منه اي فائده

انظر الى procedure الذي كتبته

procedure Mes(Tex,Title:string);

begin

application.MessageBox(PChar(Tex),PChar(Title),0);

end;

فمهمته هي اضهار شاشة حوار

طبعاً الخطوه السابقه هي خطوه البرمجه في ملفات DLL

اي تقوم ببرمجة اغراضك بتلك الطريقه

وبعد ماتنتهي منها يأتي دور تصديرها من ملف DLL

لكي تستطيع استدعائها في برنامجك

طبعاً ربما تقول وما فائده التصدير لماذا وضع

الجواب هو : انه ربما يوجد هنالك procedure او Function مربوط مع procedure او Function آخر

في معنى آخر انه ربما تكون بعض عمليات ال procedure او Function المكتوب داخليه

اما بالنسبة بعمليه التصدير فتتم بواسطة امر exports ومن ثم كتابة procedure او Function المطلوب تصديره

اليك هذا المثال الذي يوضح لك عمليه تصدير الأوامر من ملف DLL

طبعاً المثال هو تكمله للمثال السابق بحيث اني سأقوم بتصدير ال procedure

لكي استطيع استدعاءه في البرنامج

library Project1;

uses

SysUtils,Windows, Messages, Forms,

Classes;

{$R *.RES}

procedure Mes(Tex,Title:string);

begin

application.MessageBox(PChar(Tex),PChar(Title),0);

end;

exports

Mes;

begin

end.

وكما تلاحظ انه تم كتابة اسم procedure او Function بعد الأمر exports

وهناك ملاحظه وهي عندما يكون لديك اكثر من procedure و Function تريد استخراجهم

فماعليك الا ان تقوم بالفصل بين كل procedure و Function تريد استخراجه

مثال :

exports

mes,yes,pati;

وهذه عمليه انشاء ملفات Dll بشكل مبسط

طبعاً عندما تريد تنفيذ ملف Dll قم اولاً بحفظ ال Project ثم قم بالتشغيل وبعدها سيتم تنفيذ ملف

Dll اذا لم يكن هناك اخطاء برمجه في نفس الملف المحفوظ عليه ال Project

اما بالنسبة لكيفية استدعاء ملفات Dll

فهناك طريقتان وهما ( دنميكيه و اوتوماتيكية )

طبعاً العملية الأوتوماتيكية هي الأسرع والأسهل

وسأقوم بشرحها

اولاً قم بنقل ملف Dll الى نفس ملف برنامجك

ثم قم بفتح برنامجك

(( طبعاً سأعمل لك مثال على ملف ال Dll السابق وهو استدعاء procedure Mes(Tex,Title:string); من ملف ال Dll السابق ))

procedure Mes(Tex,Title:string); external 'Project1.dll';

لاحظ كيفية عملية الأستدعاء فيتم اولاً كتابة ال procedure و ال Function المطلوب

ومن ثم استدعاء ملف Dll بواسطة external وبعدها كتابة اسم ملف ال Dll المطلوب

طبعاً الكود السابق يقوم بتحميل ملف ال Dll المحدد

اما بعميلة تشغيله

فهي سهله جداً (( طبعاً هي عمليه اسدعاء ال procedure السابق الذي قمنا بتحميله بالخطوه السابقه ))

procedure TForm1.Button1Click(Sender: TObject);

begin

Mes('Welcome to','Program');

end;

ملاحظه :

لايمكن استدعاء اي procedure او Function لم يتم استخراجه من ملف ال Dll

وتقبل اطيب تحياتي اخوك SUM

#3

الحمد لله انك رجعت الينا بعد هده المدة الطويلة لاننا بحاجة اليكم

اشكرك والف شكر..........................

تحياتي

#4

أستاذي العزيز SUM

أكثر الله من أمثالك و جعل هذا الموضوع في ميزان حسناتك

أنا ادور عن جواب لهذا السؤال من زمااان.. و أخيران وجدته منك و بطريقة سهله و مفهومه.

لكن انا طماع, و عندي ائله حول هذا الموضوع :

1) لو أردت ربط ملف الـDLL أثناء العمل, مثلا يظهر مربع InputBox و تكتب فيه اسم الملف الـDLL و يتم الربط بينهم... (لا تنسى انه تكتب اسم الملف معناها انه اسم الملف غير محدد)

2) لو أردت ان اعمل فورم Form في ملف الـDLL , هل يجب ان يكون ذلك باستخدام الـWindows , الطريقة المعقدة الطويله الصعبه اللي تكتب فيها عرض الفورم و طولها و و و و و و و و و .....او هناك طريقة لرسم الفورم مثلا؟ او غيرهم؟

3) مثلا اريد تغير الاوامر في الـOnChange أو OnClick أو OnRead أو اي حاجة فيها On قبلها :) ... يعني ابي اظيف عليهم شيء, كيف؟

انا متأكد اني سأجد الإجابه على اسإلتي منك او من أحد الأعضاء المحترفين هنا...

أشكركم مقدماً :)

DR-A

#5

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

اخي العزيز DR-A

اشكرك على على طرحك مثل هذه الأسئلة العملية

واما بالنسبة لأجابات اسئلتك فهي حسب الآتي

1- لايمكنك ان تضهر نافذه لأختيار ملف DLL وتفيذ التطبيقات عليه

بالطريقه السابقه (( الأوتوماتيكية ))

لأني كما ذكرت لكم سابقاً انه توجد عمليتين لتحميل ملف Dll الأولى هي الأوتوماتيكية والثانيه هي الدنميكية

طبعاً الفرق بين الأوتوماتيكية و الدنميكية هو

ان الأوتوماتيكية تقوم بتحميل ملف Dll اثناء تشغيل البرنامج

اما الدنميكية فهي تقوم بتحميل ملف Dll عند الحاجه اليه

طبعاً انا ذكرت لكم في السابق طريقة التحميل الأوتوماتيكي

لأنه هو الأسهل

طبعاً يمكنك اختيار ملف Dll ثم عمل التطبيقات عليه في طريقة التحميل الدينميكي

وقد قمت بعمل مثال يوضح لك طريقة التحميل الدنميكي وكذلك يقوم بماادرت

لأني لو قمت بشرحه لطال الكلام فأختصار للموضوع قمت بعمل مثال لكي تعم الفائده اكثر

وستجد هذا المثال على هذه الوصلة :

http://www.8op.com/sum/dll.zip

2-اذا كنت تريد ان تنشي Form تصميمي في ملف DLL وتتعامل معه كما تتعامل مع برمجة اي برنامج فيمكنك

ذلك بأن تضغط على زر NewForm (( تجده بجانب زر التشغيل RUN اذا لم تعرفه فيمكنك الذهاب الى

قائمة File وستجده هناك ايضاً )) طبعاً تقوم بالضغط على ذلك الزر حينما تكون قد فتحت ملف ال DLL الذي

تريد العمل عليه

3- طبعاً الطريقه هذه سهله جداً

وهي حسب الآتي

اولاً في البرنامج الذي تريد ان تربطه مع ملف DLL

قم بالتصريح فيه في Type ب Procedure واجعل خصائص هذا ال Procedure مساويه للحدث الذي تريد ان

تربطه معه فمثلاً عندما تريد ان تربطه بالحدث OnClick التابع ل Button

فلاحظ Procedure التابع للحدث

procedure TForm1.Button1Click(Sender: TObject);

فالخصائص التابعه له هي

(Sender: TObject);

قم بأخذها

وبعدها قم بالتصريح عن ال Procedure في Tupe

لاحظ هذا الشكل :

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Procedure SUM(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

end.

وكما ترى اني اعطيت ال Procedure المصرح به بأسم SUM نفس خصائص الحدث الذي اريد ربطه به

بعد هذه الخطوه قم بجلب ال Procedure او Function الذي تريد من ملف ال DLL

مثلاً انا نريد ان نجلب Procedure اسمه Mes (( الذي قمنا بعمله في شرح عمل ملف DLL ))

فنقوم بأستدعاء ذلك ال Procedure بنفس طريقة استدعاء الاشياء من ملفات ال DLL

Procedure Mes(Tex,TiTle:string); external 'Project1.dll';

بعدها نقوم بكتابة ال Procedure السابق الذي صرحنا عنه في type (( الذي يحمل اسم SUM ))

ونقوم بوضح الأحداث الذي نريد عملها على ال Procuder المستجلب من ملف DLL

بوسط ذلك ال Procedure

اليك صوره من ذلك:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Procedure SUM(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

Procedure Mes(Tex,TiTle:string); external 'Project1.dll';

{$R *.DFM}

Procedure TForm1.SUM(Sender: TObject);

begin

Mes('Weclome To Programes','Test');

end;

end.

طبعاً الآن انتهينا من العمل لم يبقا علينا الا الربط

طبعاً طريقة الربط اعني ربط ال Procedure ب الحدث OnClick هي حسب الآتي :

Button1.OnClick:=SUM;

ارجوا ان تكون قد اتضحت لك الصورة

وتقبل اطيب تحياتي اخوك SUM

#6

أخي العزيز SUM

أشكرك على التفصيل الرائع, و أشكرك أكثر على وقتك

الصراحة أحرجتني من الأجوبه الشافية هذي :)

اللـــه يوفقك لكل ما فيه الخير

هذا الموضوع مغلق.

مواضيع مشابهة