【问题标题】:Mixed mode MFC application not initializing correctly in VS2008混合模式 MFC 应用程序在 VS2008 中未正确初始化
【发布时间】:2010-11-07 07:34:27
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    你好,

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

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

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

    谢谢, 张荣春


    这是正确的!

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

    谢谢先生。张!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多