نجيب المجيدي
21-03-2005, 10:43 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
هذا واحد من المواضيع الهامة لأبعد حد , فكل مبرمج لابد و أنه قد تعامل بشكل أو بآخر مع المكتبات , و بالذات مبرمجي vb6 حيث أن هذه اللغة الرائعة لها أيضاً بعض العيوب حيث أنها مثلاً لا تدعم Multithrading و كذلك نلمس القصور في هذه اللغة عندما نحاول التعامل المباشر مع الهارد وير وغير ذلك , و عموماً نستطيع التخلص من هذا العيب وذلك باستخدام مكتبات الربط الديناميكية , فما هي هذه المكتبات وكيف نقوم بإنشائها؟
هذا ما أحاول الإجابة عليه أدناه , فأقول مستعيناً بالله:
إن مكتبات الربط الديناميكية هي تلك الملفات التي تنتهي بالامتداد DLL اختصاراً لـ (Dynamic Linked library) وهي تختلف عن المكتبات الاستاتيكية في أن المكتبات الاستاتيكية ترتبط بالبرنامج التنفيذي وقت الترجمة بينما المكتبات الديناميكية ترتبط به وقت التنفيذ, وما دوال API إلا مكتبات ربط ديناميكية تحتوي على دوال يستخدمها النظام و نستطيع نحن الاستفادة منها أيضاً.
سنقوم هنا بعمل مثال بسيط لمكتبة ديناميكية تحتوي على دالة تقوم بجمع رقمين و إعادة الناتج ...
* المتطلبات: VC++6 , VB6
أولاً: قم بتشغيل vc++ و من القائمة "ملف" اختر "جديد"
File --> New
ومن ثم من التبويب Objects اختر Win32 Dynamic - link library وضع اسماً للمشروع و ليكن ( Ex1 )
بعد ذلك اختر a simple DLL project ثم إنهاء
الآن أشر للملف Ex1.cpp من FileView , و أظف الكود التالي:
int _stdcall sum(int x , int y)
{
return x+y;
}
ستقوم هذه الدالة بإعادة ناتج جمع العددين الممررين لها
و الآن بقي أن ننشيء ملف .def , من القائمة File اختر New و اختر text file من التبويب Files
قم بتسمية هذا الملف بـ "Ex1.def"
أضف الكود التالي للملف
LIBRARY Ex1
EXPORTS
sum @1
و أخيراً اختر Build Ex1.dll من القائمة Build و تأكد بأنه لا توجد أخطاء .
في حال نجحت عملية البناء , تكون المكتبة جاهزة للاستخدام في المجلد Debug نقوم بنسخها إلى المجلد system أو system32, و يمكن استدعائها من الفيجوال بيسك كالتالي:
نقوم بفتح مشروع جديد بالفيجوال بيسك , و نضيف للنموذج ثلاثة مربعات نص و زر أمر واحد ,
و نكتب الكود التالي
Private Declare Function sum Lib "example1.dll" (ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
Text3.Text = Str(sum(CInt(Text1.Text), CInt(Text2.Text)))
End Sub
إذا مر كل شيء على ما يرام نكون قد نجحنا في بناء أولى مكتباتنا الديناميكية الخاصة , ويكون المجال مفتوحاً لعمل الكثير الكثير ...
تحياتي
و السلام عليكم ورحمة الله وبركاته
السلام عليكم ورحمة الله وبركاته
هذا واحد من المواضيع الهامة لأبعد حد , فكل مبرمج لابد و أنه قد تعامل بشكل أو بآخر مع المكتبات , و بالذات مبرمجي vb6 حيث أن هذه اللغة الرائعة لها أيضاً بعض العيوب حيث أنها مثلاً لا تدعم Multithrading و كذلك نلمس القصور في هذه اللغة عندما نحاول التعامل المباشر مع الهارد وير وغير ذلك , و عموماً نستطيع التخلص من هذا العيب وذلك باستخدام مكتبات الربط الديناميكية , فما هي هذه المكتبات وكيف نقوم بإنشائها؟
هذا ما أحاول الإجابة عليه أدناه , فأقول مستعيناً بالله:
إن مكتبات الربط الديناميكية هي تلك الملفات التي تنتهي بالامتداد DLL اختصاراً لـ (Dynamic Linked library) وهي تختلف عن المكتبات الاستاتيكية في أن المكتبات الاستاتيكية ترتبط بالبرنامج التنفيذي وقت الترجمة بينما المكتبات الديناميكية ترتبط به وقت التنفيذ, وما دوال API إلا مكتبات ربط ديناميكية تحتوي على دوال يستخدمها النظام و نستطيع نحن الاستفادة منها أيضاً.
سنقوم هنا بعمل مثال بسيط لمكتبة ديناميكية تحتوي على دالة تقوم بجمع رقمين و إعادة الناتج ...
* المتطلبات: VC++6 , VB6
أولاً: قم بتشغيل vc++ و من القائمة "ملف" اختر "جديد"
File --> New
ومن ثم من التبويب Objects اختر Win32 Dynamic - link library وضع اسماً للمشروع و ليكن ( Ex1 )
بعد ذلك اختر a simple DLL project ثم إنهاء
الآن أشر للملف Ex1.cpp من FileView , و أظف الكود التالي:
int _stdcall sum(int x , int y)
{
return x+y;
}
ستقوم هذه الدالة بإعادة ناتج جمع العددين الممررين لها
و الآن بقي أن ننشيء ملف .def , من القائمة File اختر New و اختر text file من التبويب Files
قم بتسمية هذا الملف بـ "Ex1.def"
أضف الكود التالي للملف
LIBRARY Ex1
EXPORTS
sum @1
و أخيراً اختر Build Ex1.dll من القائمة Build و تأكد بأنه لا توجد أخطاء .
في حال نجحت عملية البناء , تكون المكتبة جاهزة للاستخدام في المجلد Debug نقوم بنسخها إلى المجلد system أو system32, و يمكن استدعائها من الفيجوال بيسك كالتالي:
نقوم بفتح مشروع جديد بالفيجوال بيسك , و نضيف للنموذج ثلاثة مربعات نص و زر أمر واحد ,
و نكتب الكود التالي
Private Declare Function sum Lib "example1.dll" (ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
Text3.Text = Str(sum(CInt(Text1.Text), CInt(Text2.Text)))
End Sub
إذا مر كل شيء على ما يرام نكون قد نجحنا في بناء أولى مكتباتنا الديناميكية الخاصة , ويكون المجال مفتوحاً لعمل الكثير الكثير ...
تحياتي
و السلام عليكم ورحمة الله وبركاته