Visual studio 2008 混合模式MFC应用程序在VS2008中未正确初始化
我已将混合模式MFC应用程序从VS2005转换为VS2008。编译正常,但启动应用程序时,我在afxwin1.inl中得到一个断言,因为afxCurrentResourceHandle=NULL 这是在调用MyCWinApp::InitInstance之前。调用堆栈是Visual studio 2008 混合模式MFC应用程序在VS2008中未正确初始化,visual-studio-2008,mfc,initialization,assertions,mixed-mode,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
mfc90d.dll->AfxWinInit (with HINSTANCE = NULL)
myapp.exe!InternalDllMain
myapp.exe!PostDllMain
myapp.exe!dynamic intilizer for postDllMain::A0x61ae6c8e
VS2005中的同一个项目启动得很好,我注意到正在调用名为WinMainCRTStarup的PostDllMain being,而不是WinMainCRTStarup,它得到了一个已定义的实例句柄:
mfc80d.dll!AfxWinInit (with HINSTANCE = 0x0040000)
mfc80d.dll!AfxWinMain
myApp.exe!WinMain
myApp.exe!__tmainCRTStartup
myapp.exe!WinMainCRTStartup
该应用程序使用/clr和指向托管、非托管和混合lib和dll的链接进行编译
有人能解释一下这个问题吗?
VS2005和VS2008在这方面是否存在已知差异
谢谢 我在MSDN论坛上从张荣春那里得到了一个很好的答案: 你好, 我在我这边做了一个测试,我没有在我这边重现这个问题。然而,Vsiaul Studio 2008中的调用堆栈看起来像是一个DLL,因此我尝试在项目设置的前处理器定义(/D“_USRDLL”)中添加_USRDLL,得到了与您描述的相同的断言。请检查项目是否使用“\u USRDLL”编译 更多信息 让我知道这是否有帮助,如果没有,请向我们展示项目设置的命令行 谢谢, 张荣春
这是正确的 事实证明,我的解决方案中设置为静态库的一个项目在其预处理器定义中定义了_USRDLL。无论如何,这在VS2005中被丢弃了,但VS2008显然不喜欢它 谢谢张先生