كيف يمكنني استدعاء C ++ Win32 DLL من تطبيق وحدة التحكم C ++ Win32 أخرى

StackOverflow https://stackoverflow.com/questions/3572874

سؤال

ما هو شاغلي الرئيسي هو أنني قادر على كتابة DLL C ++ باستخدام VC ++. الآن DLL موجود في مجلد التصحيح.

كيف يمكنني استخدام DLL في تطبيق C ++ الآخر. كيفية إضافة مرجع أو ربط DLL بالتطبيق.

نقطة أخرى ، أثناء إنشاء DLL ، يعطيني معالج VC ++ خيار Thre:

  1. مشروع DLL فارغ
  2. مشروع DLL بسيط
  3. DLL الذي يصدر بعض الرمز

الآن وفقًا لمقال من CP لقد استخدمت الخيار الثالث. ((غير قادر على المتابعة حيث تم استخدام DLL بواسطة تطبيق MFC ، بعضها لم يتقدم في هذه المرحلة الزمنية)

هل أحتاج دائمًا إلى اختيار الخيار الثالث؟ ماذا يعني الخياران الآخران؟

هل كانت مفيدة؟

المحلول

لست متأكدًا تمامًا من ما هي أسئلة ولكن:

لا يهم حقًا الخيار الذي تستخدمه هو مجرد مسألة ما يفعله المعالج بالنسبة لك ؛ إذا كنت تستخدم الخيار الثالث ، فإن المعالج ينشئ قليلاً في ملف الرأس الذي يبدو هكذا:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

الطريقة التي يعمل بها هذا هو أنه في DLL Project Test_Exports يتم تعريفه في خيارات التحويل البرمجي ، لذلك يقوم Test_API بتقييم Dllexport وبالتالي إخبار الرابط بتصدير هذه الرموز. إذا قمت بتضمين هذا الرأس في مشروع آخر ، فإنه يعرّف test_api بأنه dllimport الذي يخبر المترجم بالربط به في وقت التشغيل في DLL. تستخدم هذه الطريقة التي يتم تحديدها لتصدير الرموز على نطاق واسع وسهلة القراءة.

من أجل استدعاء دالة/فئة داخل DLL ، تحتاج إلى تصدير الرموز إحدى طريقين: أ) باستخدام __declspec (dllexport) [يبدو هذا الخيار الأكثر ملاءمة في جميع الحالات تقريبًا] في مشروعك

أراد أيضًا ذكر أنك تحتاج إلى تضمين مشروع DLL في الحل الخاص بك لملف .exe أو .lib الذي تم إنشاؤه بواسطة مجموعة DLL.

نصائح أخرى

يمكنك استخدام "DLL يقوم بتصدير بعض الرموز" لمعرفة كيفية بناء مشروع DLL. بمجرد أن تفهم هذا ، استخدم "مشروع DLL بسيط". يمكنك أن تبدأ دائمًا مع "DLL تقوم بتصدير بعض الرموز" ، وتغيير الكود الذي تم إنشاؤه بواسطة المعالج ، واستبدال عينة الفئة/الدالة/الرمز مع الرمز الخاص بك.

للإشارة إلى .DLL Project من مشروع عميل ، أضف ملف .LIB إلى تبعيات رابط مشروع العميل: المشروع - الخصائص - الرابط - الإدخال - تبعيات إضافية. للتأكد من أنه يمكن العثور على ملف .lib بواسطة Linker ، إضافة دليل حيث يتم وضع ملف .lib ، إلى قائمة أدلة الارتباطات. هناك مكانان يمكن القيام بهما: محليًا في مشروع العميل (المشروع - الخصائص - الرابط - عام - أدلة مكتبة إضافية) وعالميًا ، لجميع مشاريع VC ++ (الأدوات - خيارات - أدلة VC ++ - المكتبات).

آخر شيء هو التأكد من أنه يمكن تحميل DLL بواسطة Client .exe في وقت التشغيل. يجب أن يكون DLL في الدليل الحالي أو الدليل القابل للتنفيذ أو Windows أو دليل النظام أو متاح من خلال متغير المسار.

يمكن استيراد DLL من خلال تحديده على أنه تبعية في إعدادات المشروع لتطبيق وحدة التحكم داخل Visual Studio كما هو موضح من قبل Alex Farber. يجب عليك التأكد من أن التطبيق قادر على العثور على DLL عن طريق وضع DLL في أي موقع محدد متغير المسار. يمكنك أيضًا تحميل DLL برمجيًا داخل تطبيقك باستخدام طريقة LoadLibrary (انظر الوثائق هنا http://msdn.microsoft.com/en-us/library/ms684175(vs.85).aspx) واستدعاء طريقة تم تصديرها داخل DLL باستخدام وظيفة getProcadDress (راجع http://msdn.microsoft.com/en-us/library/ms683212(vs.85).aspx ).

اذهب من خلال الخطوات التالية لإعداد مشروعين. http://msdn.microsoft.com/en-us/library/ms235636.aspx

في هذه التعليمات ، تتم إضافة المشروع الجديد إلى نفس الحل الذي يحتوي على DLL. قد لا يكون هذا هو الحال في معظم الحالات. إذا كان لديك مشروعان منفصلان تريد معالجته ، فإنه يغير الإجراء أعلاه قليلاً على النحو التالي.

  1. في مشروع DLL ، تأكد من تكوينه لإنشاء ملف DLL. للقيام بذلك ، انقر على المشروع في Explorer Solutions وانتقل إلى الممتلكات. ضمن خصائص التكوين >> عامة ، قم بتغيير نوع التكوين إلى "المكتبة الديناميكية (.DLL)". الآن ، قم بتجميع مكتبة الارتباط الديناميكي عن طريق اختيار SOLUTE ، Build Build على شريط القائمة.

  2. إنشاء المشروع الآخر والملفات كما هو مذكور في الرابط. لاستخدام DLL في التطبيق ، يجب الرجوع إليه. للقيام بذلك ، أضف ملف LIB الذي تم إنشاؤه من المكتبة الديناميكية. يتم إنشاء ملف LIB في نفس المجلد مثل DLL. إذا تم استخدام Visual Studio في وضع التصحيح ، فسيكون ذلك في Project >> Volder >> Debug. إذا تم استخدام وضع الإصدار ، فإن مجلد المشروع >> الإصدار. لاستخدام ملف LIB في التطبيق ، انتقل إلى Project >> Properties >> Linker >> input >> تبعيات إضافية وأضف اسم ملف lib إلى القائمة ("AFR24X7.LIB" في حالتي).

  3. للتأكد من أنه يمكن العثور على ملف .lib بواسطة Linker ، إضافة دليل حيث يتم وضع ملف .lib ، إلى قائمة أدلة الارتباطات. هناك مكانان يمكن القيام بهما: محليًا في مشروع العميل (Project >> Properties >> Linker >> General >> أدلة مكتبة إضافية) وعالميًا ، لجميع مشاريع VC ++ (أدوات >> خيارات >> VC ++ أدلة >> المكتبات ).

  4. أضف ملف تضمين كما هو مذكور في الرابط.

  5. انسخ ملف DLL الذي تم إنشاؤه ولصقه في مجلدات إصدار التطبيق وتصحيحها (إذا كنت تستخدم كلاهما).

  6. أكمل بقية الخطوات بخلاف تعيين التبعيات الواردة في الرابط.

أتمنى أن يساعد هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top