混合模式MFC应用程序未在VS2008中正确初始化

时间:2009-07-01 12:07:07

标签: visual-studio-2008 mfc initialization assertions mixed-mode

我已将混合模式MFC应用程序从VS2005转换为VS2008。它正在编译好但是在启动应用程序时,我在afxwin1.inl中得到一个断言,因为afxCurrentResourceHandle = NULL。

这是在调用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之间在这方面有任何已知的差异吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我在MSDN论坛上得到了张荣春的一个很好的答案:

您好,

我在我身边进行了一次测试,但我没有在我身边重现这个问题。但是,Vsiaul Studio 2008中的调用堆栈看起来像是一个DLL,所以我尝试在项目设置的Proprocessor Definitions(/ D“_USRDLL”)中添加_USRDLL,我得到了与您描述的相同的断言。请检查项目是否使用“_USRDLL”进行编译。

更多信息 http://support.microsoft.com/kb/115088

如果有帮助,请告诉我,如果没有,请告诉我们项目设置的命令行吗?

谢谢, 张荣春


这是正确的标记!

事实证明,我的解决方案中设置为静态库的项目之一在其预处理器定义中定义了_USRDLL。不知何故,这在VS2005中被丢弃,但VS2008显然不喜欢它。

谢谢先生。张!