【发布时间】:2015-07-24 20:53:13
【问题描述】:
我正在尝试使用工具集 12_xp 将旧产品从 VC6 升级到 VS2013。我可以让项目编译得很好,但是我得到了一个运行时断言,它似乎与 CSingleLock lock() 调用有关。
CSingleLock slock(&CV7CmnSS::m_cs); // Wait for access
slock.Lock(m_dwTimeout); // <- this is the line that does it.
CV7CmnSS::m_cs 在此项目引用的另一个 dll 中的不同类中声明为静态对象。
exe的头文件有这个CCriticalSection CV7CmnSS::m_cs;
在 CV7CmnSS 头文件中声明static CCriticalSection m_cs;
我尝试单步执行 MFC 代码(我知道,我知道...) 这是我能得到的所有进一步......
mfc120d.dll!CCriticalSection::Lock(unsigned long dwTimeout) Line 118 C++ //
_AFXMT_INLINE BOOL (::CCriticalSection::Lock(DWORD dwTimeout))
{
ASSERT(dwTimeout == INFINITE);
(void)dwTimeout;
return Lock();
}
我得到的断言 I 框:
相当通用..
两个 dll 项目都针对相同的工具集 12_xp,都使用 MBCS,都使用 MFC 作为共享 dll。两者都使用多线程调试 dll 设置。
我怀疑是跨线程问题?但我不确定如何进行。
如果我可以提供更多信息,请告诉我。
编辑:
我忘了添加这个小宝石,如果我在没有调试的情况下在发布版本中运行程序,我可以进一步使用该应用程序,但是会弹出这个奇怪的消息......
【问题讨论】:
标签: c++ dll visual-studio-2013 mfc visual-c++-6