C++ 调试断言在CScrollView中失败
我最近将一个旧的MFC(多线程)项目从VS6移植到VS2015。该项目似乎已编译,但当我通过GUI启动操作时,我得到“调试断言失败” 程序:C:\windows\system32\mfc140d.dll文件: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp行:962 然后调试会话在以下代码处中断C++ 调试断言在CScrollView中失败,c++,mfc,C++,Mfc,我最近将一个旧的MFC(多线程)项目从VS6移植到VS2015。该项目似乎已编译,但当我通过GUI启动操作时,我得到“调试断言失败” 程序:C:\windows\system32\mfc140d.dll文件: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp行:962 然后调试会话在以下代码处中断 #ifdef _DEBUG void CFT100View::AssertValid() const { CScrollView::A
#ifdef _DEBUG
void CFT100View::AssertValid() const
{
CScrollView::AssertValid();
}
<>这是我第一次用C++和MFC工作。如果有人能帮我解决这个问题,我将不胜感激
我跟踪了调用堆栈。AssertValid最终进入wincore.cpp。在为wincore.cpp加载符号后,我发现它写在断言失败下面的注释中
// Note: if either of the above asserts fire and you are
// writing a multithreaded application, it is likely that
// you have passed a C++ object from one thread to another
// and have used that object in a way that was not intended.
// (only simple inline wrapper functions should be used)
//
// In general, CWnd objects should be passed by HWND from
// one thread to another. The receiving thread can wrap
// the HWND with a CWnd object by using CWnd::FromHandle.
//
// It is dangerous to pass C++ objects from one thread to
// another, unless the objects are designed to be used in
// such a manner.
“这是我第一次使用C++和MFC”——你在编译器中做了6版本的跳转(也许更多),你没有预料到任何问题,因为你没有经验?我确实期待一些问题。我很惊讶它编译时没有错误。现在我只需要解决这个问题这可能会给出更多提示。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:callstack应该包含您需要的所有信息。您直接或间接地调用类成员而不满足其前提条件。这通常发生在调用成员太早或在对象的生命周期中太迟时,但也可能有其他原因。没有代码,这只是一个猜测游戏。“这是我第一次使用C++和MFC”——你在编译器中做了6版的跳跃(也许更多),你没有预料到任何问题,因为你没有经验?我确实期待一些问题。我很惊讶它编译时没有错误。现在我只需要解决这个问题这可能会给出更多提示。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:callstack应该包含您需要的所有信息。您直接或间接地调用类成员而不满足其前提条件。这通常发生在调用成员太早或在对象的生命周期中太迟时,但也可能有其他原因。但是,如果没有代码,这只是一个猜测游戏。