我已经成功地升级MFC应用程序,它是编制一个老版本的开发工作室Visual Studio2008年。一个非常小的数目的变化是必要的,因为一些重大变化MFC。现在,一切工作,我还想采取下一步行动和编写的解决方案 /clr.

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

下面是步骤,我们:

  1. 设置 Runtime Library多线程的调试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在一个共同问题,必须AUX_DATA dllimported。

extern __declspec(dllimport) AUX_DATA afxData

线状态,而不是使用模板课程,用这个

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

根据国家信息需要。例如,请参阅 在这里, 一些成员被转移到模块状态的修复是一个错误。注意AfxGetModuleThreadState存在,但是没有证件的和可以改变未来版本。

赢得国家没有按门铃,它是如何使用?有可能是一种新的方式来完成它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top