我已經成功升級了使用舊版Developer Studio編譯爲Visual Studio 2008的MFC應用程序。由於某些原因需要進行少量更改打破MFC的變化。現在,一切正常,我想要採取下一步並用/clr
編譯解決方案。使用/ clr編譯MFC應用程序(步驟1:鏈接到動態DLL)
要做到這一點,我發現在MSDN網站上有用的信息:
這裏是我所採取的步驟:
- 將運行時間庫設置爲多線程調試DLL(/ MDd)。
- 設置使用MFC到在共享DLL中使用MFC。
但是,這樣做使我從項目鏈接:
到
afxData
參考不再能解決;以某種方式,afxData
僅在與MFC靜態鏈接時纔可見。在我的代碼,我有以下聲明:extern AFX_DATA AUX_DATA afxData;
與靜態鏈接MFC版本工作正常。
對
_afxThreadState
和_afxWinState
的引用也無法解析。
以下是完整的錯誤消息:
error LNK2001: unresolved external symbol "struct AUX_DATA afxData" ([email protected]@[email protected]@A)
error LNK2001: unresolved external symbol "class CThreadLocal<class _AFX_THREAD_STATE> _afxThreadState" ([email protected]@[email protected][email protected]@@@A)
error LNK2001: unresolved external symbol "class CProcessLocal<class _AFX_WIN_STATE> _afxWinState" ([email protected]@[email protected][email protected]@@@A)
的情況下,這可能與該名稱重整...
那麼,我該怎麼才能做到動態鏈接反對MFC,但仍參考afxData
,_afxThreadState
和_afxWinState
?
謝謝你的提示;這裏是我試圖解決這個問題的第一個結果:AfxGetThreadState()似乎取代了以前使用_afxThreadState。 我應該想到__declspec(dllimport)我自己!我試了一下,它的工作原理。 我會進一步調查_afxWinState的事情。它指向一個_AFX_WIN_STATE類,它有一個單獨的成員m_bUserAbort,在打印時我們的代碼使用該成員來檢查用戶是否按下了Cancel按鈕,我猜是從我看到的。 – 2009-05-27 14:51:13