我已成功将使用旧版Developer Studio编译的MFC应用程序升级到Visual Studio 2008.由于MFC中的一些重大更改,需要进行非常少量的更改。现在一切正常,我想采取下一步,用/clr
编译解决方案。
为此,我在MSDN网站上找到了有用的信息:
以下是我采取的步骤:
但是,这样做会阻止我链接项目:
无法再解析对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
?
答案 0 :(得分:2)
在共享DLL中使用MFC时,AUX_DATA必须为dllimport
ed。
extern __declspec(dllimport) AUX_DATA afxData
对于线程状态,而不是使用模板类,请使用其中一个
AFX_MODULE_THREAD_STATE* pState = _AFX_CMDTARGET_GETSTATE()->m_thread;
AFX_THREAD_STATE* pState = AfxGetThreadState();
取决于您需要的州信息。例如,有关已移至模块状态以修复错误的某些成员,请参阅here。请注意,AfxGetModuleThreadState存在但未记录,可以在将来的版本中更改。
胜利状态不响铃,它是如何使用的?可能有一种新方法可以实现它。