25-01-2011, 08:30 PM
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
سنقوم بتوضيح خطوات بناء ملف تنفيذي تطبيق ويندوز (Win32), بطريقة مبسطة , أولا خطوات العملية :
1- ترجمة الملف المصدري (Compiling)
2- تحويل OMF الى Intel OMF
3- ربط Coff بمكتبات النظام , إنتاج ملف تنفيذيالمرحلة الأولى :
عملية ترجمة الكود سورس إلى كود أسمبلي (لغة الآلة) , لكي تتم العملية بنجاح بمرور 3 مراحل للتحقق الى إنتاج ملف Obj
- lexical analysis (التحقق من صحة الـ Token = المفردات المحفوظة if,do,begin …….ect)
- syntaxic analysis (التحقق من ترتيب الـ Token & بناء شجرة بإستخدام الـ Token)
- semantic analysis (التحقق من مبدأ المرجعية , نتأكد من القيمة المسندة لمتغير ما من نفس الطبيعة)
- code generation
حتى يتم توليد ملف مترجم (operation assembly code) يجب نجاح كل مرحلة (تم ذكر المراحل دون التفصيل لأنها موضوع أخر).
يمكن تحقيق ذلك سواء بكتابة MakeFile أو تنفيذ مباشر Command Line , يكفي كتابة dcc32 في الـ Cmd لتوضيح بارامترات الترجمة .مثلا لإنتاج ملف OMFخام :
كود :
dcc32 -JP _MsgBox.pasالمرحلة الثانية :
إنطلاقا من دلفي 4 , قامت بورلاند بتحويل OMF (Object Module Format)i من Intel Omf الى Borland Omf
Borland Omf : قابل للربط فقط بـ Borland Linker (نحول Omf الى Coff : ممكن)
أدوات عملية : RmCoff By mickeylan / OMF2D by EliCZ
أدوات عملية : RmCoff By mickeylan / OMF2D by EliCZ
Intel Omf : قابل للربط بـ microsoft Linker (نحول Coff الى Omf لإستعمالها في دلفي : ممكن)
أدوات عملية : Object file converter
- يمكن معرفة محتوى الـ lib / Obj بواسطة TDUMP المرفق في مجلد Binأدوات عملية : Object file converter
كود :
TDUMP -C user32.lib (COFF only)
TDUMP -d MsgBox.obj (OMF only )مواضيع ذات صلة :
انتاج ملف Object .
إستخدام ملف lib
المرحلة الثالثة :
يتم دمج كل من الأبجكت فايل (DCu) & ملفات الريسورس & ملفات Bin , لإنتاج ملف تنفيذي Exe صورة توضيحية:
![[صورة: dflow.png]](http://www.delphi4arab.net/images/dflow.png)
مثال :
كود :
unit _MsgBox;
interface
procedure Start;
implementation
function MessageBoxA(hWnd: Cardinal; lpText, lpCaption: Pchar; uType: Cardinal): Integer; stdcall;
external 'user32.dll' name '_MessageBoxA@16';
function MessageBeep(uType: Cardinal): Integer; stdcall;
external 'user32.dll' name '_MessageBeep@4';
procedure Start;
begin
MessageBeep($FFFFFFFF);
MessageBoxA(0,PChar('TF6M | D4A.Com'),
PChar('Www.Delphi4Arab.Com'),0);
MessageBeep($FFFFFFFF);
End;
end.من نوع Cardinal حجمه 4 Byte , يمكن أيضا فتح الـ Lib بأحد محررات الـ Hex أو Ida لمعرفة لائحة
الدوال & الإجراءات المخزنة .
الأن نأتي إلى عملية الترجمة + التحويل + الربط , عبارة عن MakeFile مرفق, هذا الأخير يتطلب تعديل مسار الـ Lib فقط !!
بالتوفيق,,
I'M Fly Like A G6



![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)