سؤال

أنا فقط أبحث عن شرح بسيط وموجز للفرق بين هذين.لا تتناول MSDN الكثير من التفاصيل هنا.

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

المحلول

  • __declspec(dllexport) يخبر الرابط أنك تريد أن يكون هذا الكائن متاحًا لاستيراد ملفات DLL الأخرى.يتم استخدامه عند إنشاء ملف DLL يمكن للآخرين الارتباط به.

  • __declspec(dllimport) يستورد التطبيق من ملف DLL حتى يتمكن تطبيقك من استخدامه.

أنا مجرد مطور C/C++ مبتدئ، لذا ربما يكون لدى شخص ما تفسير أفضل مني.

نصائح أخرى

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

__declspec( dllimport ) - سيتم استيراد الفئة أو الوظيفة التي تم وضع علامة عليها من ملف DLL.هذا غير مطلوب فعليًا - أنت بحاجة إلى مكتبة استيراد على أي حال لجعل الرابط سعيدا.ولكن عندما يتم وضع علامة بشكل صحيح مع dllimport, ، لدى المترجم والرابط معلومات كافية لتحسين المكالمة؛وبدون ذلك، ستحصل على ارتباط ثابت عادي بوظيفة كعب الروتين في مكتبة الاستيراد، مما يضيف خداعًا غير ضروري. ONT1 ONT2

حالتا استخدام مختلفتان:

1) أنت تحدد تطبيق فئة داخل ملف dll.تريد برنامج آخر لاستخدام الفصل.هنا تستخدم dllexport أثناء قيامك بإنشاء فئة ترغب في أن يكشفها dll.

2) أنت تستخدم وظيفة يوفرها ملف dll.قمت بتضمين رأس المتوفرة مع dll.هنا يستخدم الرأس dllimport لإحضار التنفيذ الذي سيستخدمه البرنامج الحالي.

غالبًا ما يتم استخدام نفس ملف الرأس في كلتا الحالتين ويتم تحديد ماكرو.يحدد تكوين البناء الماكرو المراد استيراده أو تصديره حسب ما يحتاجه.

يتم استخدام Dllexport لوضع علامة على الوظيفة كمصدرة.يمكنك تنفيذ الوظيفة في ملف DLL الخاص بك وتصديرها بحيث تصبح متاحة لأي شخص يستخدم ملف DLL الخاص بك.

Dllimport هو العكس:فهو يضع علامة على دالة على أنها مستوردة من ملف DLL.في هذه الحالة، عليك فقط الإعلان عن توقيع الوظيفة وربط الكود الخاص بك بالمكتبة.

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