تجميع تطبيق MFC مع / CLR (Step1: ربط DLLs الديناميكي)
سؤال
لقد قمت بنجاح بترقية تطبيق MFC الذي تم تجميعه مع إصدار قديم من Developer Studio إلى Visual Studio 2008. وكانت هناك حاجة إلى عدد صغير جدا من التغييرات بسبب بعض التغييرات الكسر في MFC. الآن أن كل شيء يعمل، أود أن أتخذ الخطوة التالية وتجميع الحل /clr
.
للقيام بذلك، لقد وجدت معلومات مفيدة على موقع MSDN على الويب:
فيما يلي الخطوات التي اتخذتها:
- تعيين مكتبة وقت التشغيل ل متعدد الخيوط DLL DLL (/ MDD).
- تعيين استخدام MFC. ل استخدم MFC في DLL مشترك.
ومع ذلك، فإن القيام بذلك يمنعني من ربط المشروع:
الإشارة إلى
afxData
لم يعد بإمكان حلها؛ بطريقة ما،afxData
مرئي فقط عند ربطه بشكل ثابت ضد MFC. في التعليمات البرمجية الخاصة بي، لدي الإعلان التالي:extern AFX_DATA AUX_DATA afxData;
الذي يعمل بشكل جيد مع إصدار MFC المرتبط بشكل ثابت.
المراجع إلى
_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 موجود ولكن لا يمكن تغيير وثائقه ويمكن تغييره في إصدار مستقبلي.
فوز الدولة لا يرن جرس، كيف يتم استخدامه؟ ربما هناك طريقة جديدة لإنجازها.