ظهور رسالة خطأ LNK4197 في الإصدار 64 بت من "برنامج التحويل البرمجي Visual c + +"

ينطبق على: Visual C++ 2010 Express

الملخص


عند بناء DLL باستخدام إصدار 64 بت من Microsoft Visual c + + برنامج التحويل البرمجي والرابط، قد تتلقى رابط رقم الخطأ LNK4197 إذا أعلنت دالة للتصدير أكثر من مرة واحدة.

الأعراض


قد يكون الإخراج الرابط مشابهة لما يلي:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll  Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification   Creating library Sample.lib and object Sample.exp 

السبب


يتم إنشاء رابط رقم الخطأ LNK4197 عندما أعلنت دالة للتصدير أكثر من مرة واحدة. يتم تعريف دالة للتصدير بإحدى الطرق التالية:
  • يتم تعريف الدالة باستخدام الكلمة الأساسية __declspec (dllexport) في الملف المصدر C:
    __declspec(dllexport) int DllSample() {   return 42;}
  • تم تعريف الدالة باستخدام تعريف الوحدة نمطية (. الملف DEF):
    EXPORTS   DllSample
قد يحدث هذا الخطأ الرابط كثرة عند كل من الكلمة الأساسية __declspec (dllexport) و. تستخدم لتعريف نفس اسم الدالة في الملف DEF. مشروع DLL.

الحل


لحل هذه المشكلة، تعريف الدالات التي تم تصديرها مرة واحدة فقط، أما باستخدام الكلمة الأساسية __declspec (dllexport) أو باستخدام. الملف DEF. لا تستخدم كلا الطريقتين.

الحالة


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

مزيد من المعلومات


تعريف دالة للتصدير أكثر من مرة واحدة، قد لا تنتج الرابط الخطأ الموضحة في قسم "الأعراض" من هذه المقالة في إصدارات 32 بت من برنامج التحويل البرمجي c + + Windows Microsoft رابط. ومع ذلك، توصي Microsoft بتعريف الدالة يصدر مرة واحدة فقط في إصدارات كل من 32 بت و 64 بت من برنامج التحويل البرمجي c + + Windows رابط.