在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败

Posted

技术标签:

【中文标题】在 MFC 编程的 \\$InstallDir\\VC\\atlmfc\\src\\mfc\\olelock.cpp 第 62 行上调试断言失败【英文标题】:Debug Assertion Failed on \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp line 62 on MFC programming在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败 【发布时间】:2014-11-05 02:57:45 【问题描述】:

我必须使用 Visual Studio 2012 在 C# 应用程序中调用示例 MFC 视图。我使用 C++/CLI 项目并从 C# 调用 C++ 类。为此,我必须使用这行代码

AFX_MANAGE_STATE(AfxGetStaticModuleState());

这将调用 MFC DLL 资源的资源句柄而不是默认资源(C# 上的 exe 文件)。 MFC 视图运行正常,但出现异常(如 C 消息框):

 Debug Assertion Failed on  \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp line 62 

这是我在安装目录时检查的源代码:

void AFXAPI AfxOleUnlockApp()

    AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
    ASSERT(pModuleState->m_nObjectCount != 0);
    if (InterlockedDecrement(&pModuleState->m_nObjectCount) == 0)
    
        // allow application to shut down when all the objects have
        //  been released
        ::AfxOleOnReleaseAllObjects();
    

我怎样才能避免这种断言?感谢您的支持。

【问题讨论】:

断言何时发生?关机时?在启动?显示 MFC 视图之后? 在 MFC 视图显示之后。在这种情况下,视图显示在 WPF 中的 Grid 中。 【参考方案1】:

这个断言只是说你调用 AfxOleUnlockApp 比调用 AfxOleLockApp 更频繁。

为特定函数设置断点。检查谁调用锁定/解锁。可能有多次释放的对象......

【讨论】:

以上是关于在 MFC 编程的 \$InstallDir\VC\atlmfc\src\mfc\olelock.cpp 第 62 行上调试断言失败的主要内容,如果未能解决你的问题,请参考以下文章

MFC控件编程之鼠标消息

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

c++编程 qt mfc

(转载)DLL动态链接库编程入门之五:MFC扩展DLL

MFC编程入门之五(MFC消息映射机制概述)

如何使用 MFC 以编程方式更改 ActiveX 控件的属性?