تطوير U32 من المؤلف باستخدام Delphi
وظائف الوظائف هي أبرز ميزة المؤلف. بالنسبة لبعض المهام الخاصة ، يسمح المؤلفون للمستخدمين بتحديد الوظائف بأنفسهم ، مما يجعل البرمجة أكثر مرونة. بالنسبة لأنظمة Windows ، يتم تخزين الوظائف المخصصة كملفات Dynamic Link Library (DLL) ، وبالتالي يتم فصل الملف الذي يخزن الوظائف المخصصة عن ملف التطبيق التفاعلي الحالي. تقدم هذه المقالة كيفية استخدام Delphi لتطوير الوظيفة المخصصة للمؤلف - 32bitu32. على الرغم من أن AuthorWareattain 5.0 قد وفرت وظيفة استخدام CrootingObject لعرض مراسلة الرسائل ، فإن هذه الميزة غير موجودة في الإصدارات قبل 4.0.
يمكن تقسيم تطوير U32 إلى خمس خطوات:
إنشاء ملفات المشروع
إنشاء وظيفة
إنشاء ملف مورد
تجميع ملفات الموارد
إنشاء U32
1. إنشاء ملفات المشروع
حدد DLL في ملف/جديد لإنشاء ملف DLL ، أضف وحدة دالة U32 في ملف/addToProject ... يمكن إعلان المستخدم في وظيفة المؤلف. على سبيل المثال:
orportsmsgbox ؛
الرمز النهائي هو كما يلي:
Libraryauthorware ؛
يستخدم
sysutils ، الفصول ،
myunitin'myunit.pas '؛
orportsmsgbox ؛
يبدأ
نهاية.
2. إنشاء وظيفة
عندما تقوم بإنشاء وظيفة متوفرة في المؤلف ، يجب أن تعلن أنها وظيفة مصدرة وإضافة الرمز بعد واجهة الكلمات الرئيسية على النحو التالي:
واجهة
الاستخدامات ، الحوار ، sysutils ، النوافذ ؛
FunctionMsGbox (MSG: String ؛ MBType:
كلمة ؛ العنوان: سلسلة): كلمة ؛ تصدير ؛
يحتاج Delphi32 إلى إضافة {$ ifdefwin32} stdcall ؛
($ endif} يتبعه إعلان الوظيفة على النحو التالي:
FunctionMsGbox (MSG: String ؛ MBType:
كلمة ؛ العنوان: سلسلة): كلمة ؛ تصدير ؛
{$ ifdefwin32} stdcall ؛ {$ endif}
الآن نضيف رمزًا إلى الوظيفة ونتبع التنفيذ:
كونست
okonly = 0 ؛
OkCancel = 1 ؛
Abortretryignore = 2 ؛
Yesnocancel = 3 ؛
Yesno = 4 ؛
RetryCancel = 5 ؛
حرجة = 16 ؛
سؤال = 32 ؛
excalamation = 48 ؛
المعلومات = 64 ؛
DefaultButton1 = 0 ؛
DefaultButton2 = 256 ؛
DefaultButton3 = 512 ؛
ApplicationModal = 0 ؛
SystemModal = 4096 ؛
وظيفة strtopch (Str: String): PCHAR ؛
فارا: PCHAR ؛
يبدأ
a: = stralloc (طول (str) +1) ؛
strpcopy (a ، str) ؛
strtopch: = a ؛
نهاية؛
FunctionMsGbox (MSG: String ؛ MBType:
كلمة ؛
var
lptext ، lpcaption: pchar ؛
H: hwnd ؛
يبدأ
lptext: = strtopch (title) ؛
LPCaption: = strtopch (msg) ؛
H: = getActiveWindow () ؛
msgbox: = messagebox (H ، lptext ، lpcaption ، mbtype) ؛
نهاية؛
3. إنشاء ملفات الموارد
آخر ما يتعين علينا القيام به هو إنشاء ملف المورد حتى يتمكن المؤلف من الاتصال بالوظيفة مباشرة. يجب أولاً إنشاء ملف .rc ثم تجميعه في ملف .res. استخدم Notepad لإنشاء ملف مورد لـ .rc. أضف التعريفات التالية: سأشرح هذه التعريفات لاحقًا:
1dll_headerpreloaddiscardable
يبدأ
"msgbox/0" ،
"/0"
نهاية
msgboxdll_headerpreloaddiscardable
يبدأ
"/0" ،
"w/0" ،
"SWS/0" ،
"النتيجة: = msgbox (msg ، mbtype ، العنوان)/r/n" ،
"/r/n" ،
"ShowMessageBox/0" ،
نهاية
إذا تم كتابة ملف DLL بتنسيق تحويل المكالمات المؤلف ، يتم تضمين دليل جميع الوظائف المخصصة المخزنة في الملف ، والمعلومات المطلوبة من قبل المؤلف عند استدعاء هذه الوظائف ، ويتم تسمية الدليل الخاص به أيضًا بمصدر الدليل ، وكل وظيفة في مصدر الدليل لها تعريفات مقابلة ، وتسمى هذه التعريفات مصادر التعريف. التنسيق المحدد هو كما يلي:
1. مصدر الدليل
شكل مصدر الدليل كما يلي:
| dll_headerpreloaddiscardable
يبدأ
"FunctionName [= exportName]/0" ،
"FunctionName [= exportName]/0" ،
...
"FunctionName [= exportName]/0" ،
"/0"
نهاية
① | هل معرف مصدر الدليل ؛
②dll_header هي علامة البداية المستخدمة لإنشاء نص وصفي ؛
يشير begins إلى بداية الملف المصدر للدليل.
تشير النهاية إلى نهاية مصدر الدليل.
2. تنسيق تعريف الوظيفة المخصصة
لكل وظيفة في مصدر الدليل ، يجب أن يكون هناك تنسيق تعريف مقابل ، التنسيق المحدد هو كما يلي:
functionNamedll_HeaderPreloadDiscardable
يبدأ
"dllfilename/0"
"ReturnValue/0"
"قائمة presumber/0"
"الوصف>" ،
"وصف"،
...
"الوصف/0"
نهاية
① يشير FunctionName إلى اسم الوظيفة المحدد في مصدر الدليل ؛
يمثل ②dllfilename اسم ملف DLL لوظيفة التخزين ؛
③ يمثل القيمة الإرجاع نوع قيمة الإرجاع للوظيفة ؛
تمثل ④argumentList قائمة نوع المعلمة في هذه الوظيفة ؛
phescription يمثل النص الوصفي للوظيفة.
يمكن أن يتكون الجسم الوصفي من العديد من الخطوط ، ولكن يجب إنهاء السطر الأخير بـ "/0".
3. نوع المعلمة الوصف تنسيق
يتم تمثيل أنواع المعلمات بحرف رأسمالي ، ويمثل كل حرف تنسيقًا للمعلمة ، كما هو موضح في الجدول التالي:
الوصف تنسيق typedescribe type
csignedcharpfarpointer
bunsignedcharflaat
IsignedShortIntegerdouble
WunsignedShortIntegersHandle
lsignedlongintegervoid
uunsignedlonginteger
4. تجميع ملفات الموارد
احفظ ملف المورد لـ .rc كـ A3W.RC (لاحظ أنه لا يمكن حفظ اسم الملف ولا يمكن حفظ اسم ملف DLL ، وإلا وتشغيله في وضع DOS:
C: /delphi32/bin/brc32-ra3w.rc-foa3w32.res
أضف الآن ملف المورد إلى المشروع ، والعودة إلى Delphi في العرض/projcetsource لفتح ملف المشروع
orportsmsgbox ؛
{$ r*.res}
حذف الخط والانضمام: {$ ifdefwin32}
{$ ra3w32.res}
{$ else}
{$ RA3W16.RES}
{$ endif}
تجميع ملفات المشروع.
5. إنشاء U32
لقد أنشأنا 32bit uplarware.dll وأعيد تسميته إلى Authorware.U32.
msgbox ("مربع التحذير" ، 1+32+0+4096 ، "هل تخرج من هذا النظام؟")