[英]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.