2

我已成功将使用旧版 Developer Studio 编译的 MFC 应用程序升级到 Visual Studio 2008。由于 MFC 中的一些重大更改,需要进行少量更改。现在一切正常,我想采取下一步并使用/clr.

为此,我在 MSDN 网站上找到了有用的信息:

以下是我采取的步骤:

  1. 运行时库设置为Multi-threaded Debug DLL (/MDd)
  2. 将 MFC 的使用设置为在共享 DLL中使用 MFC 。

但是,这样做会阻止我链接项目:

  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

4

1 回答 1

2

在共享 DLL 中使用 MFC 时,必须dllimport编辑 AUX_DATA。

extern __declspec(dllimport) AUX_DATA afxData

对于线程状态,而不是使用模板类,使用其中之一

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

取决于您需要的状态信息。例如,请参阅此处了解已移至模块状态以修复错误的一些成员。请注意,AfxGetModuleThreadState 存在,但未记录在案,可能会在未来版本中更改。

Win状态不敲钟,怎么用?可能有一种新的方法来完成它。

于 2009-05-27T12:40:34.480 回答