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

كيف أصنع DLL وأستدعيه مثل ال API

مغلق
بدأه tarekafifi في 26 يونيو 2005 · 15 رد · 2,843 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لقد قمت بعمل ملف DLL يقوم ببعض المهام

كالتالي

Public Class TarekAPI

Public Sub connectToBox()

MsgBox("aaa")

End Sub

End Class

وقمت بإستدعائه من برنامج آخر بالأمر

Declare Sub connectToBox Lib "Project1.dll" ()

وعند ضغط زر وضعت الكود التالي

Private Sub Command1_Click()

connectToBox

End Sub

=============================================

عند هذه النقطة يحدث خطأ وهو

Can't find DLL entry point

-----------------------------------

أين المشكلة ؟؟؟؟

كيف اقوم بوضع entry point في كود ال DLL

-------------------------------------

مع العلم انني اعلم ان من الممكن ان اضع ال DLL فيل هذا في ال Refferences

وأستدعي خواصه بكل بساطة

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

بإختصار أريد ان أصنع API خاص بي

مع تحياتي

طارق عفيفي

#2

تم نقل الموضوع لقسم الـ VB6

رأس الحكمة الإيمان بالله

#3

السلام عليكم

------------

لماذا تم نقل الموضوع لقسم VB6 ,,, ألا يمكن عمل المطلوب بال VB.NET

ألا استطيع عمل مكتبة DLL بال VB.NET ,,, يمكن أن تستدعي كما نستدعي مثلا API من خلال كود Declare Sub أو DllImport

مع حدود علمي ان ال Compiler في بيئة الفيجوال ستديوا واحدة بمعني اني إذا كتبت برنامج بالفيجوال بيزيك يكون في النهاية كما كنت قد كتبته بالسي مثلا

أي ان الفيجوال بيزيك دوت نت بكامل قوة السي ,,,,, وإن كان هذا صحيح لماذا لا أستطيع عمل ما أبحث عنه ؟؟؟؟

مع تحياتي

طارق عفيفي

#4

قمت بنقل الموضوع الى قسم الـ VB6 نظراً لأن الكود VB6 و ليس كود دوت نت...

اقتباس
ألا استطيع عمل مكتبة DLL بال VB.NET

بالطبع تستطيع ذلك، لكن طريقة استدعاء ما بداخل هذا الـ Dll ستكون مختلفة عن استدعاء الـ API's

لكي تكتب Dll بإستخدام الـ VB.Net إبدأ مشروع Class Library جديد من داخل الـ VS.Net ، ثم اكتب الكود الخاص بك داخل الـ Class، ثم قم بعمل Build للمشروع، بعد ذلك إذهب للمجلد bin الذي يوجد داخل مجلد المشروع لتجد داخله الـ Dll الخاص بالـ Class ...

و لكي تستدعيه في مشروع آخر قم بعمل Add Reference له من خلال هذا المشروع و استخدمه مثل أي Class موجود بالدوت نت:

Dim mClass as New Class1
mClass.connectToBox()

رأس الحكمة الإيمان بالله

#6

السلام عليكم

شكرا لكم جميعا علي سرعة الرد

--------------

أولا ::

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

اما بالنسبة للجزء الأول من البرنامج فهو VB.net وذلك لأن مشروعي كامل مصنوع بالدوت نت , ولكن هذا كود بسيط جدا لتحديد هل الآداه تعمل أم لا

انا اعلم تمام العلم كيفة عمل DLL من خلال VB6 و VB.NET وأعلم كيفية إستدعائه من خلال ال Reference وكيف استدعي Class

ولكن كان سؤالي هو :

كيف ان أجعل البرنامج يستدعي بطريقة أخري كال API (( وذلك لهدف ان تصلح هذه ال DLL لأي لغة برمجة أخري غير الفيجوال بيزك ))

ببساطة أريد ان اصنع برنامج dll وأستطيع ان اناديه وأتعامل معه من خلال برنامج "" الأوركال ""

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

ولكن التغيير انني أريد عمل ال DLL من خلال الفيجوال بيزيك دوت نت وليس لغة السي ( في إعتقادي الشخصي أن من الممكن حدوث ذلك ولكن الطريقة أو طريقة بناء الكود ؟؟؟؟؟ )

مع تحياتي

طارق عفيفي

#7

هل يوجد حل لسؤالي ؟؟

#8

هل يوجد حل لسؤالي ؟؟

#9

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

ولكن بعدما رأيت إصرارك استعدت أملي

وبحثت عبر الإنترنت ولحسن حظي وجدت هذه المقالة:

Creating a Windows DLL with Visual Basic

والتي يقول الكاتب فيها أن مشكلة ال VB أنها لا تستطيع إنشاء DLL للويندوز

ولكنه وجد حلاً للالتفاف حول هذه المعضلة

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

#10

الوصلة لا تعمل

تأكد منها

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#11

كيف لا تعمل!! لقد جربتها بنفسي قبل إرسال مشاركتي فأنا أدقق كثيراً لمثل هذه الأمور

على كل هذه الوصلة من جديد جرب هذه:

http://www.windowsdevcenter.com/pub/a/wind...create_dll.html

أو هذه:

http://www.windowsdevcenter.com/pub/a/wind...dll.html?page=1

هي عبارة عن مقالة من 3 صفحات جرب الوصلة آنفة الذكر وحاول استبدال رقم الصفحة 1 ب 2 أو 3

تم تعديل هذه المشاركة بواسطة aroma_kt في 12 يوليو 2005 في 14:59

#12

أنا فعلاً مستغربة عدم وجود رد من القراء الأعزاء على مضمون ما كتب في المقالة التي وضعت link لها!! ألم يهتم أحد ما بقراءتها؟

إنها فعلاً مقالة ممتازة تمكنكم من صنع مكتبة (DLL) مثل مكتبات الويندوز الخاصة بال API وذلك كله بلغة الفيجوال بيسك البسيطة أي لا داعي بعد الآن لصناعتها باستخدام لغة السي ++ الأصعب مقارنة بالفيجوال بيسك.

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

إليكم هذا الملف المضغوط والذي يحوي المشاريع التي ورد ذكرها بالمقالة - أولاً يجب فك ضغط الملف المرفق في الدليل الجذر للسواقة C وذلك بدون إنشاء مجلد فرعي لأن الملف المضغوط سوف ينتج عنه مجلد يدعى WinDll

1) المجلد MathDllPrj داخل مجلد WinDll يحوي مشروع المكتبة MathDll والذي يتضمن أربعة توابع Functions أول تابع فيها يدعى DllMain ويجب وضعه لأن الويندوز تحتاجه

أيضاً هناك ثلاثة توابع أخرى تقوم بعمليات رياضية بسيطة (لاحظ أن الهدف من المشروع هو توضيح كيفية إنشاء مكتبة) وهذه العمليات الحسابية هي:

1- increment أي الزيادة بمقدار واحد

2- decrement أي النقصان بمقدار واحد

3- square أي مربع العدد x^2

2) المجلد MathDllTestSample داخل مجلد WinDll يحوي مشروع استدعاء المكتبة MathDll التي في المشروع السابق وتتضمن الفورم ثلاثة أزرار كل واحد يستدعي عملية حسابية من العمليات آنفة الذكر.

3) المجلد ProxyLinker داخل WinDll يحوي مشروع يقوم بإنشاء ملف تنفيذي جديد ليحل معضلة عدم تمكن الفيجوال بيسك من إنشاء مكتبة ويندوز Windows DLL ولكن قبل أن نتطرأ لشرح ماهية هذا المشروع يجب معرفة ما يلي:

عادةً عندما تقوم بعمل Compile لمكتبة DLL يقوم الفيجوال بيسك باستدعاء ملف Link الموجود في مجلد الفيجوال بيسك بنفس المجلد الذي فيه vb6.exe ويمرر باراميترات معينة له لإنشاء ملف DLL الجديد لكن كاتب المقالة وجد أن المكتبة التي تنتج عن هذه العملية لا يمكن استخدامها كمكتبات ال API المشهورة وقارن الكاتب بين هذه البارميترات في حالة إنشاء المكتبة بواسطة السي ++ وفيما إن أنشأها بVB ولاحظ أن هناك باراميتر واحد ناقص في حالة VB ووجود هذا الباراميتر هو الذي يجعل المكتبة مكتبةً صالحةً للاستخدام كمكتبة API

ولهذا الهدف من المشروع الذي يدعى LinkProxy أن ينتج ملفا تنفيذياً جديداًً يستدعي ملف ال link الخاص بالفيجوال بيسك ويمرر له الباراميتر الناقص من ضمن الباراميترات الافتراضية ولكن كيف نجعل الفيجوال بيسك يستدعي ملفنا التنفيذي الجديد حينما يحاول ال vb عمل Compile لمكتبة ما؟؟؟؟

ببساطة نقوم بتغيير اسم ملف ال Link الأصلي (الخاص بالvb) إلى linklnk ونجعل ملفنا الجديد هو الذي يدعى Link وبهذا نحقق المطلوب

ولكن حاذر من أن تقوم بعملية overwrite (استبدال) للملف الأصلي لأن الملفين كلاهما يستوجب وجودهما.

الآن نأتي لهذا الباراميتر الناقص الذي حدثتكم عنه هو:

/def drive:\path\dllname.def

أي يجب أن ننشئ ملفاً بنفس اسم الDLL ولاحقته .def ونضعه في المسار الذي فيه ملفات مشروع المكتبة وله الsyntax أو الصيغة التالية:

NAME dllname
LIBRARY anytext
DESCRIPTION "dll description"
EXPORTS DllMain @1
        functionName2 @2
        functionName3 @3
        functionName4 @4
إلخ.......

قم باستبدال:

dllname باسم المكتبة من دون اللاحقة .dll

dlldescription بوصف ما يعبر عن عمل المكتبة الجديدة

anytext بأي نص لا يحوي فراغات أو رموز

functionName2, functionName3, functionName4 بأسماء التوابع الموجودة في المكتبة الخاصة بك بنفس الترتيب الذي ترد فيه في الكود خاصتك

أما التابع DllMain فيجب أن يكون هو أول تابع في هذه التوابع ويستوجب وجوده لأن الويندوز تحتاجه كما سبق وأن ذكرت في الأعلى.

أرجو أن أكون قد وفيت وكفيت بهذا الشرح وأن يكون شرحي واضحاً.

والسلام عليكم ورحمة الله وبركاته...

WinDll.zip

تم تعديل هذه المشاركة بواسطة aroma_kt في 14 يوليو 2005 في 12:38

#13

السلام عليكم

==========

أخيرا وجت من يهتم بهذا الموضوع !!

شكرا جزيل الشركر ل aroma_kt علي الإهتمام

----

للعلم لقد أصابني الإحباط الشديد واليأس من حل هذا الموضع ,, ووجت انني يجب ان اتعلم لغة السي لحل مشكلتي

ومع هذا الإحباط ,, لم أكمل المشروع وتأخرت به

لقد أفقت الآن وسوف استمر إن شاء الله به مرة أخري

--------=

سوف أقرأ الموضوع وأرد عليه بعد التجربة

إعزروني علي التأخير

طارق عفيفي

#14

الحمد لله

لقد قمت بعمل المطلوب بنجاح 100 % وقمت بإنتاج ملف DLL مثل API الوندوز بالضبط

=====================

ولكن المشكلة مازالت قائمة لدي حيث انني في بداية مقالي اريد ان اصنع ملف DLL من خلال ال VB.NET وليس VB6

حاولت القيام بنفس الخطواط بالضبط في vb.net

ولكن لم اجد ملف ال link.exe الخاص بالـ Compile للفيجوال بيسك دوت نت لكي استبدله بغيره ,

وذلك لوضع البارميترات الناقصة .

؟؟؟؟؟؟؟؟؟؟؟؟؟ ماذا أفعل ؟؟

---------

مع تحياتي لكم جميعا وبالخصوص ل aroma_kt

طارق عفيفي

#15

الأخ طارق عفيفي المحترم

أنا مسرورة جداً أن الطريقة المذكورة نجحت معك.

أنا بصراحة لا أعرف vb.net ولهذا لا أستطيع أن أساعدك فيما يتعلق بها

ولكن لماذا لا تنشئ ال dll في الvb وتستدعيها بعد ذلك كأي مكتبة api من vb.net؟؟

وأنا جاهزة للمساعدة إن أردت إنشاءها في الvb

#16

بصراحة لقد قمت ببناء البرنامج كامل بالفيجوال بيزيك دوت نت

وخد مني مجهود كبير ووقت كتيير

----

فكنت اتمني ان اكمل مجهودي هذا . بعد مخلص البرنامج كله وقف علي هذه النقطة !!

وأعتقد بعد الوصول للحل هنا في الفيجوال بيزيك يمكن الوصول له هناك وذلك بما أن الدوت نت اقوي بكثير من الفجوال العادي

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

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