/clr を使用して MFC アプリケーションをコンパイルする (ステップ 1:動的 DLL に対するリンク)

StackOverflow https://stackoverflow.com/questions/914448

  •  06-09-2019
  •  | 
  •  

質問

古いバージョンの Developer Studio でコンパイルされた MFC アプリケーションを Visual Studio 2008 に正常にアップグレードしました。MFC に重大な変更がいくつかあったため、非常に少数の変更が必要でした。すべてがうまくいったので、次のステップに進み、ソリューションをコンパイルしたいと思います。 /clr.

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

私がとった手順は次のとおりです。

  1. をセットする ランタイムライブラリマルチスレッド デバッグ 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?

役に立ちましたか?

解決

共有DLLで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が存在するが、文書化されていないですし、将来のバージョンで変更される可能性があることに注意してください。

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

scroll top