2

古いバージョンのDeveloperStudioでコンパイルされたMFCアプリケーションをVisualStudio2008に正常にアップグレードしました。MFCにいくつかの重大な変更があったため、必要な変更はごくわずかでした。すべてが機能するようになったので、次のステップに進み、を使用してソリューションをコンパイルします/clr

そのために、MSDNWebサイトで役立つ情報を見つけました。

これが私が取ったステップです:

  1. ランタイムライブラリマルチスレッドデバッグDLL(/ MDd)に設定します。
  2. 共有DLLでMFCを使用するようにMFCの使用を設定します。

ただし、そうすると、プロジェクトをリンクできなくなります。

  1. への参照はafxData解決できなくなりました。どういうわけか、afxDataMFCに対して静的にリンクしている場合にのみ表示されます。私のコードには、次の宣言があります。

    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を使用する場合は、AUX_DATAを編集する必要がありますdllimport

extern __declspec(dllimport) AUX_DATA afxData

スレッドの状態については、テンプレートクラスを使用するのではなく、次のいずれかを使用してください

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

必要な状態情報によって異なります。たとえば、バグを修正するためにモジュール状態に移行した一部のメンバーについては、ここを参照してください。AfxGetModuleThreadStateは存在しますが、文書化されておらず、将来のバージョンで変更される可能性があることに注意してください。

勝利状態はベルを鳴らしません、それはどのように使用されますか?それを達成するための新しい方法がおそらくあります。

于 2009-05-27T12:40:34.480 に答える