سؤال

عند إنشاء ملف DLL باستخدام Visual C++ 2008، لدي خياران.يمكنني إنشاء "مكتبة الصف", ، والذي أفهم أنه سيعطيني بالفعل مكتبة .Net التي تستخدم امتداد CLI (المُدار) لـ C++.

نظرًا لأنني لا أريد ذلك، وافترضت أنني بحاجة إلى ملف .LIB ثابت للارتباط بمشروع آخر قابل للتنفيذ لـ Visual C++ windows، اخترت بدلاً من ذلك "Win32 Project"، وفي لوحة إعدادات التطبيق، حدد C++ (بدون MFC) ) DLL.

سيؤدي هذا إلى إنشاء مشروع بملف .cpp والذي من المفترض أن يكون في المكان الذي أحدده "الوظائف المصدرة لتطبيق DLL".

لا يبدو أن هذا ما أريده أيضًا.في الأساس، ما أبحث عنه هو المعادل الأصلي لـ C++ لما يمكن أن يكون تجميعًا لمكتبة الفصل في C# .NET.أريد تجميع بعض الفئات في ملف DLL، ثم الحصول على مشروع .EXE استخدم فئات DLL عن طريق تضمين ملفات رأس مشروع DLL والارتباط بـ .LIB لحل المراجع.

ما هي الطريقة المعتادة للقيام بذلك؟

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

المحلول

أنت تفعل ذلك بشكل صحيح.ما ستحتاج إليه هو وضع علامة على فصولك الدراسية __declspec(dllexport) لإتاحتها من خارج المشروع.عند إنشاء المشروع، ستقوم بإنشاء كل من .DLL و.LIB.

نصائح أخرى

  • إنشاء مشروع جديد
  • فيجوال سي++:Win32:مشروع Win32
  • إعدادات التطبيق حدد DLL وحدد "تصدير الرموز"

عندما تقوم بإنشاء المشروع، فإنه سيتم إيقاف فئة تم تصديرها لك، تسمى عادةً C{MyLib}.

أنت على حق في إنشاء ملف DLL لـ C++ (بدون MFC).يمكنك إنشاء فئاتك وسيتم تصدير نقاط الإدخال التي تحددها من مكتبة الارتباط الحيوي (DLL) هذه للاستخدام بواسطة كود C++ آخر (على سبيل المثال، تطبيق Win32 المكتوب بلغة C++).

نظرًا لأن أسماء C++ تتشوه تلقائيًا بواسطة المترجم إلى قيم غريبة ورائعة، فليس من العملي تصديرها كما لو كان عملاء DLL، على سبيل المثال، برامج C.ولكن إذا كان كل شيء في C++، يجب أن تكون على ما يرام.

إذا قمت بإنشاء بعض الفئات، يمكنك اختيار ربطها ديناميكيًا (كملف DLL) ولكنك ستحتاج إلى مكتبة استيراد (يتم إنشاؤها لك تلقائيًا) تحتوي على تعريفات رموز DLL.يمكنك أيضًا اختيار الارتباط بشكل ثابت للتعليمات البرمجية الخاصة بك من أحد التطبيقات - في هذه الحالة، سينتهي بك الأمر بمكتبة ثابتة (أيضًا .LIB) تحتوي على رمز الكائن الفعلي في فئاتك بدلاً من الرموز الموجودة في ملف DLL.

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

أعتقد أن هذه المقالة تصف ما تحاول القيام به:http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

أنا شخصياً أفضل أيضًا تصدير وظائف C (على عكس C++) حيث أجعل هذا المؤشر واضحًا لتجنب الاضطرار إلى الاهتمام بزخرفة اسم الطريقة الخاصة بالمترجم وكشف الوظائف التي تم إنشاؤها بواسطة المترجم.

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