2

混合モードのMFCアプリケーションをVS2005からVS2008に変換しました。コンパイルはOKですが、アプリケーションを起動すると、afxCurrentResourceHandle = NULLであるため、afxwin1.inlでアサートが発生します。

これは、MyCWinApp::InitInstanceが呼び出される前です。コールスタックは

mfc90d.dll->AfxWinInit (with HINSTANCE = NULL)
myapp.exe!InternalDllMain
myapp.exe!PostDllMain
myapp.exe!dynamic intilizer for postDllMain::A0x61ae6c8e

VS2005の同じプロジェクトが正常に起動し、WinMainCRTStarupと呼ばれるPostDllMainビーイングの代わりに呼び出され、定義されたインスタンスハンドルを取得していることに気付きました。

mfc80d.dll!AfxWinInit (with HINSTANCE = 0x0040000)
mfc80d.dll!AfxWinMain
myApp.exe!WinMain
myApp.exe!__tmainCRTStartup
myapp.exe!WinMainCRTStartup

アプリは/clrを使用してコンパイルされ、マネージド、アンマネージド、および混合ライブラリとdllの両方にリンクします。

誰かがこの問題に光を当てることができますか?VS2005とVS2008の間で、この領域に既知の違いはありますか?

ありがとう!

4

1 に答える 1

2

MSDN フォーラムで Rong-Chun Zhang から素晴らしい回答を得ました。

こんにちは、

私は自分の側でテストを実行しましたが、自分の側では問題を再現しませんでした。ただし、Vsiaul Studio 2008 のコール スタックは DLL のように見えるため、プロジェクト設定の Proprocessor Definitions(/D "_USRDLL") に _USRDLL を追加してみましたが、ご説明のとおりのアサーションが得られました。プロジェクトが「_USRDLL」でコンパイルされているかどうかを確認してください。

詳細情報 http://support.microsoft.com/kb/115088

これが役立つかどうか教えてください。そうでない場合は、プロジェクト設定のコマンド ラインを教えてください。

ありがとう、Rong-Chun Zhang


これは的を射ていた!

静的ライブラリとして設定されている私のソリューションのプロジェクトの 1 つに、プリプロセッサ定義で _USRDLL が定義されていることがわかりました。どういうわけか、これは VS2005 では破棄されますが、VS2008 では明らかに気に入りません。

ありがとうございます。張!

于 2009-07-03T14:22:03.267 に答える