2

我已将混合模式 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 在这方面有什么已知的区别吗?

谢谢!

4

1 回答 1

2

我在 MSDN 论坛上从 Rong-Chun Zhang 那里得到了一个很好的回答:

你好,

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

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

让我知道这是否有帮助,如果没有,您能否向我们展示项目设置的命令行?

谢谢,张荣春


这是正确的!

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

谢谢先生。张!

于 2009-07-03T14:22:03.267 回答