繁体   English   中英

VC6至VS2013 MFC运行时错误

[英]VC6 to VS2013 MFC Runtime Error

我正在尝试使用工具集12_xp将旧版产品从VC6升级到VS2013。 我可以使项目正常编译,但是我得到了运行时ASSERT,它似乎与CSingleLock lock()调用有关。

CSingleLock slock(&CV7CmnSS::m_cs); // Wait for access
    slock.Lock(m_dwTimeout); // <- this is the line that does it.

CV7CmnSS::m_cs在此项目CV7CmnSS::m_cs另一个dll中的不同类中声明为静态对象。

exe的头文件具有此CCriticalSection CV7CmnSS::m_cs;

如CV7CmnSS头文件中的声明,请参见static CCriticalSection m_cs;

我尝试逐步完成MFC代码(我知道,我知道...),这是我所能获得的一切的更多信息...

mfc120d.dll!CCriticalSection :: Lock(unsigned long dwTimeout)第118行C ++ // <-从调用堆栈窗口

_AFXMT_INLINE BOOL (::CCriticalSection::Lock(DWORD dwTimeout))
{ 
    ASSERT(dwTimeout == INFINITE); 
    (void)dwTimeout; 

    return Lock(); 
}

我得到的断言我框:

在此处输入图片说明

相当通用。

这两个dll项目都针对同一个工具集12_xp,都使用MBCS,都使用MFC作为共享dll。 两者都使用多线程调试dll设置。

我怀疑存在跨线程问题? 但是我不确定如何进行。

如果还有我可以提供的信息,请告诉我。

编辑:

我忘了添加这个小宝石,如果我在发行版中运行该程序而不进行调试,我可以进一步了解该应用程序,但是会弹出此奇怪的消息。

在此处输入图片说明

您显示的代码揭示了问题所在:有一个断言要求dwTimeout参数为INFINITE。 从代码中可以看到,正如CCriticalSection :: Lock文档中所提到的,该参数将被忽略,因此您可以更改代码以将INFINITE作为参数传递,或者仅调用不带参数的重载(一样的东西)。

至于为什么在发布模式下不会发生错误,这是因为断言仅在调试模式下编译,因此断言永远不会发生。 导致该消息框的原因与断言完全无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM