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

ما هى انواع المشاريع التى يمكن من خلالها برمجة DLL

مغلق
بدأه طارق إبراهيم في 30 مايو 2004 · 9 رد · 2,523 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اريد معرفة انواع المشاريع التى تمكننى من انشاء DLL باستخدام مصرف VC

لااريد اكواد بل اود معرفة الطرق التى يمكن برمجة dll بها من داخل مصرف ال VC فمثلاً فى الفيجوال بيسك يوجد مشاريع من نوع ACTIVEX DLL واسمع ان فى ال VC يمكن برمجة ال DLL عن طريق MFC فهل هناك انواع اخرى غير إنشائها بال MFC وما هو الفرق إن وجد

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#2

يوجد في مصرف ال Visual C++ 6 ,, نوعين من أنواع ال dll :

كما هو موضح من مصرف ال visual Studio 6 في الصورة التالي ,,

Main.jpg

النوع الأول MFC DLL :-

كما في الصورة ,,

MFC_DLL.jpg

توجد فيه 3 أنواع :

الأول MFC Extensions DLL (using Shared MFC :

يجب في هذا النوع أن يكون البرنامج المستضيف لملف ال dll الذي تنشأه حاليا من نوع ال MFC ,, يعني اذا أردت أن تنشيء برنامجا يستفيد من البنية Document/View بحيث تضمنها في ملف ال dll ,, ستحتاج لجعل البرنامج على الصيغة MFC Extensions Dll ,,

لو لاحظت مع shared MFC ,, هذا يعني أن حجم ملف ال Dll سيكون أصغر مايمكن ,, لأنه لن يربط ملفا ال MFC ستاتيكيا في ملف ال dll ,,

النوع الثاني والثالث ,, عبارة عن regular Dll ,, وهو ال dll العادي بدون MFC لكنه يدعم ال MFC ,, يعني يمكن أن تستخدم خدمات MFC لبرامج لاتدعم MFC اصلا ,, كاستخدام ال Win32 API ,, "ليس لدي فكرة حول امكانية دعمها للغة أخرى كال VB "

ويوجد ماهو Static Linking with MFC ومنها ال shared ,, الستاتيك ستجعل حجم ملف ال dll كبيرا ,, وال shared ستجعل الملف أصغر مايمكن ,,

النوع الثاني كما هو في الصورة الأساسية في الأعلى سيكون كالتالي :

Regular_Dll.jpg

Win32 Dynamic dll :-

كما هو واضح من الصورة أنواع لافرق بينها سوى في عملية الاعداد ما هو واضح ,,

استعمل النوع الاخير اذا كنت تريد أن تطور ملفات dll ,, لتعمل على برامج VB مثلا ,, أو برامج win32 Api ,, أو حتى MFC ,, لكن بدون دعم قدرات ال MFC داخل ملف ال dll نفسه ,,

أرجو أن أكون قد أفدتك ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

اشكرك بالرغم من اننى اسال اساله غبيه شويه

هل يمكن برمجة dll باستخدام ال sdk وهل هناك فرق بينه وبين برمجته بال ال vc

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#4

نسيت أن أعقب ,, أن أنواع ال dll السابقة فقط لاستضافة دوال عادية بدون أي دعم ل COM ,,

أما أنواع ال Com فهي أيضا ,,

MFC ActiveX ,, أو ال ATL Com App Wizard ,,

ال ActiveX كما نعلم تجعل الملات على امتداد OCX ولها رأس Dll عادي أيضا ,, وهي عبارة عن COM لكن مع واجهة ومطبق عليها الكثير من الواجهات أمثال ال Idisaptch لدعم عدة لغات ,,

com العادية يمكن أن ننشئها بعدة طرق منها البدأ من الصفر :huh: وهي احدى الطرق الجديدة والغامضة جدا لدى بوليس الشرطة ووكالات الاستخبار ,, حيث تعطي فرص انتحار بطرق غامضة وغير معروفة بسبب نزيف حاد في المخ أو توقف نبضات القلب فجأة من القهر طبعا :)

الطريقة الثانية بال ATL Com ,, وهي أفضل طرق تطوير ال COM وهي سريعة ومريحة أكثر وأسهل ,,

الطريقة الثالثة استخدم ال MFC Wizard ActiveX ,, ويمكن من انشاء ال ActiveX ,, يمكن أن تكون بدون واجهة ,, لكن في ال Com البدون واجهة يحبذ استخدام ال ATL ,, لأنها أبسط وأسرع ,, مع أن كلها معقد ,, ولو في السي++ فقط ,,

ربما الأمور تكون أسهل في غير الفيجوال سي++ ,, لكن هذه هي السي++ تجعلك دائما في وجه المدفع ,,

كل الأنواع أعلاه يمكن أن تكون على ملفات DLL ويمكن أن تكون ال com في ملف exe أيضا كال DCOM وهي الت سميت بال COM+ اذا عملت خارج المعالجة ,, و dll في نفس المعالجة ,, وهي ال com العادية ,,

بالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

بالنسبة لل SDK فلم أسمع عن sdk مستقل لتطوير ال dll ,, لو وضحت لي ربما أفيدك أكثر ,,

وبعدين كيف امتحاناتك ؟ ان شاء الله كلو خير ,,

الله يوفقك ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

شرح رائع يا هيثم اشكرك جداً

(هل وصلتك رسالتى الخاصه)

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#7

لسلام عليكم

ما معني dll

dynamic linked lists

and thanx

#8

dll= dynamic linking library

فكر بطريقة أخرى

#9

السلام عليكم,

كما في برمجة برنامج من نوع exe يمكن أن نبرمج dll من نوعين إما باستعمال MFC أو استعمال SDK أو أقول عن طريقة API . والإختيار غالبا ما يتوقف عن مذا نريد ببرنامجنا. فطبعا الطريقة الأولى تعتبر نسبيا أسهل لأننا نعرف أن MFC تتيح لنا بعض الأشياء الجاهزة بينما الطريقة الثانية تعتبر نسبيا أصعب رغم أني شخصيا أفضل هذه الطريقة. وهنا كما ذكرت مسبقا يجب أن نعلم ماذا نريد ببرنامجنا فإذا كنا نريد منه أن يتعامل مع برامج هي أيضا من نوع MFC فلا مانع أن نصنعها بالطريقة الأولى علما أنه في هذه الحالة لا يمكننا أن نستعملها في برامجنا في الباسيك أو غيرها.

بينما إذا كتبناها عن الطريقة الثانية فهنا يمكن أن نستعملها في جميع أنواع البرامج التي تتمكن من استدعاء DLL .

وقد تبدو لنا هذه الأمور غريبة أو صعبة لكنها في الحقيقة ليست كذلك وكما قلت مسبقا أنني أفضل الطريقة الثانية وذلك أيضا أن الطريقة الأولى تخلق لنا عدة ملفات وقد نتلخبط فيها في الأول بينما الطريقة الثانية قد نكتفي فيها على ملفين فقط.

سأعطيك هنا أبسط مثال وهي دالة ترجع لنا مجموع عددين. نفتح مشروع ونختار طبعا Win32 dll ونختار مشروع فارغ. نزيد ملف من نوع CPP إلى مشروعنا ونكتب ما يلي :

#include <windows.h>

int WINAPI Somme(int x,int y)
{
	return x+y;
}

هذا كل ما سنكتبه في دالتنا وطبعا هذا أبسط شيء وهنا لا نهتم بالدالة Main ل Dll حيث أنها ليست مهمة في مثالنا هذا .وبعد هذا يجب أن نشير أن دالتنا Somme هي قابلة للتصدير حتى تتمكن البرامج الأخرى من استدعائها ولهذا سنزيد ملف إلى برنامجنا ونعطيه Extension من نوع def . ونكتب فيه ما يلي :

EXPORTS 
	Somme

طبعا يمكن أن نكتب خصائص أخرى وهنا سنكتفي بهذه الخاصية.

بعد هذا يمكن أن نبني برنامجنا وسنحصل على مكتبة يمكن استدعاءها من أي برنامج آخر مثل ما نستدعي أي مكتبة للوندوز .

إلى اللقاء.

#10

السلام عليكم ,,

شكرا جزيلا chik وضحت سؤالي

اقتباس
بالنسبة لل SDK فلم أسمع عن sdk مستقل لتطوير ال dll

ال sdk هي نفسها ال win32 API وهي الطريقة التي في الصورة الثالثة في مشاركتي السابقة ,,

وتعقيب اضافي على كلام chik ,, لمن يخاف من رموز السي الغريبة التي خرجت لنا مع مصرفات Microsoft ,, أمثال WINAPI ,, فهي ليست الا

int _stdcall ,, ومعناها أن تنظيف المتغيرات من المكدس يتبع لطريقة ال Standard Call ,, وهي الطريقة التي تعمل بها برامج الفيجوال بيسك ,, لذا من أجل التوافقية ,, ليستطيع عملاء فيحوال بيسك استدعاء دوال ال dll التي كتبت بالسي كما في دوال win32 aPI التي نستعملها يوميا ,, فهي مكتوبة بالسي أصلا ,, لكن يمكن للفيجوال بيسك استدعاء واستعمال هذه الدوال لأنها مكتوبة بل _stdcall ,,

علما بأن الطريقة العادية أو الافتراضية لدوال السي ,, التي تنشأ دون تغير طريقة الوصول هي _cdecl ,, مع أنه يمكن تغيرها من خيارات المصرف ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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