أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية إنشاء مكتبات استيراد 32-بت بدون .OBJs أو مصدر

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

131313
إخلاء مسؤولية من محتوى قديم في قاعدة المعارف
عن تقديم الدعم التقني لهاو لذلك تظهر هذه المقالة كما هي و لن يتم تحديثها Microsoft تمت كتابة هذه المقالة بخصوص منتجات توقفت
الموجز
يشرح هذا المقال كيفية إنشاء إحدى المكتبات استيراد إعطاء .DLL لديك النمطية لا يوجد مصدر التعليمات البرمجية أو كائن. لا يوجد أي أداة مساعدة 32-بت يمكن إنشاء إحدى المكتبات استيراد من .DLL ، كما كان هناك مع إصدارات Visual C++ 16-بت.

ملاحظة: قد لا تعمل هذه الطريقة مع DLLs التي تم إنشاؤها بواسطة أدوات التطوير غير التابعة لـ Microsoft.
معلومات أخرى
عادةً، عند إنشاء .DLL أو الهدف الذي يصدر الوظائف أو عناصر البيانات إحدى المكتبات استيراد (و تصدير الملف) يتم إنشاء كجزء من عملية الارتباط. ولكن في حالة التي .DLL لجهة خارجية لم شحن بمكتبة استيراد ، قد تحتاج إلى إنشاء إحدى المكتبات استيراد لاستخدام .DLL بنجاح باستخدام الارتباط الحيوي وقت التحميل. لا يلزم إحدى المكتبات استيراد لربط الحيوية وقت التشغيل.

هناك طريقتان لإنشاء إحدى المكتبات استيراد منح .DLL:
  • إنشاء ملف .DEF للاستخدام مع /DEF LIB: الأمر.
  • stub الخروج دالات واستخدم .OBJ الملفات التي تم إنشاؤها لمحاكاة علاقات الاستيراد/التصدير. ثم استخدم /DEF LIB: الأمر إلى إنشاء مكتبة الاستيراد.

إنشاء ملف .DEF

المرة الوحيدة التي يقوم فيها يمكنك استخدام ملف .DEF لإنشاء إحدى المكتبات استيراد من .DLL التي لم يكن لديك التعليمات البرمجية المصدر أو الوحدات النمطية الكائن إذا .DLL تصدير دالات عبر واجهة C. وبوجه خاص، تحتاج الدالات التي قد تم تعريف استخدام اصطلاح استدعاء C. يتم تحديد قبل السمة _cdecl عادةً المستخدمة في النموذج الأولي الدالة. لاحظ أنه إذا تم تحديد لم يتم تحديد السمة _cdecl الافتراضي عند /Gz (_stdcall هو الإعداد الافتراضي) أو /Gr (الافتراضي هو _fastcall) لم يتم تحديد في سطر الأوامر CL. يستند سبب هذا القيد افتراض التي تم إجراؤها بواسطة الأداة المساعدة LIB تلقائياً يتم تصدير كافة أسماء بدون تسطير أسفل السطر بادئة. ويصح هذا الأمر فقط عن أسماء الدالات _cdecl.

تحديد .DLL مع الدالات التي تم تصديرها عبر واجهة C, يمكنك إنشاء إحدى المكتبات استيراد باتباع الخطوات التالية:
  1. استخدم /EXPORTS DUMPBIN < اسم ملف .DLL > للحصول على قائمة رموز المصدرة .DLL في السؤال. تظهر الرموز في العمود "اسم" من الجدول تكون له عناوين "اسم تلميح ترتيبي."
  2. إنشاء ملف .DEF يحتوي قسم تصدير مع الأسماء الدالات المسرودة في العمود "اسم" الإخراج DUMPBIN.
  3. يظهر الرمز لوظائف _cdecl كما ذلك عند استخدامها في برنامج الاستدعاء. فقط ضع هذا الرمز في قسم تصدير الملف .DEF.
  4. استخدام /DEF LIB: < اسم الملف .DEF > لإنشاء ملف مكتبة و تصدير الاستيراد. سيكون الاسم الأساسي مكتبة الاستيراد الاسم الأساسي لملف .DEF. استخدام/OUT: للتحكم اسم مكتبة الإخراج.

stubbing مخرج دالات

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

لإنشاء الوظائف stubbed من النماذج الأولية في ملف رأس:
  1. عند استخدام "__declspec(dllimport)" في نموذج أولي أو تعريف تغييره إلى "__declspec(dllexport)."
  2. للحصول على الوظائف التي لا ترجع قيمة لوظائف C في مصدر C واستبدالها C الوظائف في التعليمات البرمجية المصدر C++ (المستخدم مع بناء extern "C") الفاصلة المنقوطة إنهاء تعريف الدالة مع زوج متطابق من الأقواس المتعرجة ("{}").
  3. للحصول على وظائف C++ (العمومية أو عضو) التي ترجع قيمة ، يجب إنشاء نص وهمية الدالة ، وإرجاع قيمة زائفة من النوع الصحيح. (لا تواجه عبارة إرجاع في الدالة غير قانوني.) ينتقل هذا فئة عضو الدالات، أيضاً. ضع في الاعتبار أن الغرض من هذا الإجراء خداعك الأداة المساعدة LIB إلى إنشاء مكتبة الاستيراد الصحيح بحيث يكون نصوص الوهمية هذه أي تأثير.
  4. التي يمكن stub لفئات C++ الخروج دالات عضو باستخدام النماذج الأولية في تعريف فئة طالما أن يتم تعطيل وظيفة inlining عندما تقوم ترجمة.
  5. يتم عادةً تحديد وسائط الدالة حسب نوع في ملف رأس. على سبيل المثال، Geta(int). يجب تحديد معرف وسيطة وهمية عند إضافة نص دالة وهمية Geta(int x). وإلا خطأ C2055 التي تم إنشاؤها.

المثال

إذا بدا الملف رأس يصف MYDLL.DLL مثل:
// mydll.Hextern "C" __declspec(dllimport) void _stdcall Function(void);class __declspec(dllimport) CMyClass {     int a;     long b;public:     int Geta(int);     long Getb();     CMyClass();};				
يجب أن يبدو الملف المصدر وهمية استخدام لإنشاء مكتبة الاستيراد:
 // mydll.CPP extern "C" __declspec(dllexport) void _stdcall Function(void) {} class __declspec(dllexport) CMyClass {      int a;      long b; public:      int Geta(int x) {return 111;}      long Getb() {return 111;}      CMyClass() {} };				
بمجرد يتم stubbed الدالات ، هو كل ما تحتاج إلى القيام ترجمة الملف المصدر إلى ملف .OBJ:
mydll.CPP /Ob0 /c CL
ملاحظة: تعطيل الدالة inlining مطلوب فرض إنشاء رموز الوظائف المعرفة في CMyClass. إذا تم تمكين الدالة inlining المحول البرمجي لاحظ أن هناك أية مراجع إلى وظائف عضو في وحدة الترجمة حتى أنه تجاهل نصوص الدالة. راجع على توسيع دالة مضمنة ضمن أمثليات في مرجع سطر الأوامر CL Visual C++.

بمجرد أن يكون لديك الملفات .OBJ يمكنك استخدام /DEF LIB: لإنشاء مكتبة الاستيراد (.LIB) وملف تصدير (.EXP):
/DEF LIB: mydll.OBJ
للحصول على مزيد من المعلومات حول الأمر LIB راجع "LIB المرجع" في Visual C++ المباشرة.

أيضاً، راجع المقالة التالية في "قاعدة المعارف لـ Microsoft:
140485تصدير رموز Like PASCAL في DLLs 32-بت
ربط 2.50 2.55 /lib

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 131313 - آخر مراجعة: 06/29/2004 23:25:41 - المراجعة: 2.1

  • The Microsoft Library Manager (LIB.EXE)
  • kbmt kb3rdparty kbcode kbhowto KB131313 KbMtar
تعليقات
>