تجميع تطبيق MFC مع / CLR (Step1: ربط DLLs الديناميكي)

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

  •  06-09-2019
  •  | 
  •  

سؤال

لقد قمت بنجاح بترقية تطبيق MFC الذي تم تجميعه مع إصدار قديم من Developer Studio إلى Visual Studio 2008. وكانت هناك حاجة إلى عدد صغير جدا من التغييرات بسبب بعض التغييرات الكسر في MFC. الآن أن كل شيء يعمل، أود أن أتخذ الخطوة التالية وتجميع الحل /clr.

للقيام بذلك، لقد وجدت معلومات مفيدة على موقع MSDN على الويب:

فيما يلي الخطوات التي اتخذتها:

  1. تعيين مكتبة وقت التشغيل ل متعدد الخيوط DLL DLL (/ MDD).
  2. تعيين استخدام MFC. ل استخدم MFC في DLL مشترك.

ومع ذلك، فإن القيام بذلك يمنعني من ربط المشروع:

  1. الإشارة إلى afxData لم يعد بإمكان حلها؛ بطريقة ما، afxData مرئي فقط عند ربطه بشكل ثابت ضد MFC. في التعليمات البرمجية الخاصة بي، لدي الإعلان التالي:

    extern AFX_DATA AUX_DATA afxData;

    الذي يعمل بشكل جيد مع إصدار MFC المرتبط بشكل ثابت.

  2. المراجع إلى _afxThreadState و _afxWinState لا يمكن حلها أيضا.

فيما يلي رسائل الخطأ الكاملة:

error LNK2001: unresolved external symbol "struct AUX_DATA afxData" (?afxData@@3UAUX_DATA@@A)
error LNK2001: unresolved external symbol "class CThreadLocal<class _AFX_THREAD_STATE> _afxThreadState" (?_afxThreadState@@3V?$CThreadLocal@V_AFX_THREAD_STATE@@@@A)
error LNK2001: unresolved external symbol "class CProcessLocal<class _AFX_WIN_STATE> _afxWinState" (?_afxWinState@@3V?$CProcessLocal@V_AFX_WIN_STATE@@@@A)

في حال قد يكون هذا مرتبطا باسم اسم المشاهير ...

إذن، ماذا يمكنني أن أفعل من أجل الربط ديناميكيا مقابل MFC، ولكن الإشارة afxData, _afxThreadState و _afxWinState?

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

المحلول

عند استخدام MFC في DLL مشترك، يجب أن يكون AUX_DATA dllimportإد.

extern __declspec(dllimport) AUX_DATA afxData

لحالة الموضوع، بدلا من استخدام فئات القالب، استخدم إحدى هذه

AFX_MODULE_THREAD_STATE* pState = _AFX_CMDTARGET_GETSTATE()->m_thread;
AFX_THREAD_STATE* pState = AfxGetThreadState(); 

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

فوز الدولة لا يرن جرس، كيف يتم استخدامه؟ ربما هناك طريقة جديدة لإنجازها.

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