none
Window2012R2上MFC90U.dll访问违例 RRS feed

  • 问题

  • 在Win7 XP上运行的EXE能够正常退出(每次),在Window2012R2上会在退出时崩溃(每次),崩溃在mfc90u.dll!AfxWinTerm   -> mfc90u.dll!AfxGetModuleThreadState() -> mfc90u.dll!CthreadLocalObject::GetData行412

    在Window2012中mfc90u.dll为9.00.30729.0001,在其它系统中mfc90u.dll为9.00.30729.6161

    但编译为DEBUG版本时(或Release修改为/MDb编译)在Window2012R2上退出不崩溃。

    问题:不能确认是否应用程序本身编程问题?还是因为mfc90u.dll在Window2012R2的兼容性问题?


    tbjthink

    2016年6月8日 9:56

全部回复

  • hi

    感谢在MSDN论坛发帖。

    对于你的帖子,最有可能的原因就是内存泄漏问题。请提供一下CthreadLocalObject::GetData出错时返回的错误值,或者参数的值,使用GetLastError或者try/catch捕捉异常信息,以方便我们更好的帮你解决问题。

    Best Regards,

    Sera Yu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    2016年6月9日 2:38

  • tbjthink

    2016年6月13日 5:40
  • 在Win7或XP上运行正常(同样除环境的其它条件和环境),考虑是内存泄露的情况定位不到应用程序代码中。上图中m_nSlot值显示不出,@err,hr值正常。在AfxWinMain函数中加了trycatch,能够捕捉,但是依然崩溃。

    tbjthink

    2016年6月13日 5:54
  •  在控件的InitInstance函数中,使用了AfxSetResourceHandle设置资源句柄。

     在控件的ExitInstance函数中,使用了freelibrary释放了该句柄。

    该句柄对该控件代码是全局变量。

    发现:注销掉freelibrary对应代码,主程序就不崩溃了,退出时也无泄漏的信息。

    ?是否在Window2012下对资源方式有微弱的处理差别?(相对于其它系统,在Win7 XP上控件表现正常,且无访问违例的信息输出)


    tbjthink

    2016年6月14日 8:43
  • 既然是在程序退出的时候崩溃,我建议您检测一下退出部分的代码,窗口关闭函数,类的析构函数/是否资源的地方加一些log信息,先定位到出错的地方~

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2016年6月15日 9:10
    版主