Debugging Visual Studio 2013项目:调试断言失败 我一直在VisualStudio项目C++工作了几个星期,今天早上我遇到了调试错误,这些错误阻止了可执行文件的启动。编译器和链接器似乎都做得很好。 但是,我有一个调试断言失败,似乎涉及到的文件在基础类目录中,它被称为DLGDATA.CPP。调试器指向的此代码段中失败的ASSERT FALSE语句 HWND CDataExchange::PrepareCtrl(int nIDC) { ASSERT(nIDC != 0); ASSERT(nIDC != -1); // not allowed HWND hWndCtrl; COleControlSite* pSite = NULL; m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); if (hWndCtrl == NULL) { // Could be a windowless OCX pSite = m_pDlgWnd->GetOleControlSite(nIDC); if (pSite == NULL) { TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC); ASSERT(FALSE); // that is the one AfxThrowNotSupportedException(); }

Debugging Visual Studio 2013项目:调试断言失败 我一直在VisualStudio项目C++工作了几个星期,今天早上我遇到了调试错误,这些错误阻止了可执行文件的启动。编译器和链接器似乎都做得很好。 但是,我有一个调试断言失败,似乎涉及到的文件在基础类目录中,它被称为DLGDATA.CPP。调试器指向的此代码段中失败的ASSERT FALSE语句 HWND CDataExchange::PrepareCtrl(int nIDC) { ASSERT(nIDC != 0); ASSERT(nIDC != -1); // not allowed HWND hWndCtrl; COleControlSite* pSite = NULL; m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); if (hWndCtrl == NULL) { // Could be a windowless OCX pSite = m_pDlgWnd->GetOleControlSite(nIDC); if (pSite == NULL) { TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC); ASSERT(FALSE); // that is the one AfxThrowNotSupportedException(); },debugging,visual-studio-2013,assertion,Debugging,Visual Studio 2013,Assertion,当我创建一个显示控制变量值的框时,我不太清楚我是如何创建这个的。当我忽略失败并继续调试时,这会触发一个断点并将我带到winocc.cpp,这也是要突出显示的ASSERT语句 BOOL CWnd::EnableWindow(BOOL bEnable) { ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); if (m_pCtrlSite == NULL) return ::EnableWindow(m_hWnd, bEnable);

当我创建一个显示控制变量值的框时,我不太清楚我是如何创建这个的。当我忽略失败并继续调试时,这会触发一个断点并将我带到winocc.cpp,这也是要突出显示的ASSERT语句

BOOL CWnd::EnableWindow(BOOL bEnable)
{
ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

if (m_pCtrlSite == NULL)
    return ::EnableWindow(m_hWnd, bEnable);
else
    return m_pCtrlSite->EnableWindow(bEnable);
}
我可能会回到备份,但这需要几个小时的工作时间,我想知道当这些问题发生时如何处理。如果它们再次发生。
干杯,M.

如果您没有使用向导就手工编写了控件,那么您可能缺少实例化控件类的代码。MFC消息告诉您控件无效。跟踪消息将告诉您对控件资源ID的期望值。请确保这是您在“资源”对话框中指定的值。

我想我已经了解了正在发生的事情。我倾向于复制主控件对话框上的文本框并对它们重新命名,以便它们的新名称对我有意义。当我试图使用分配给这些控制框的控制变量时,这会把事情搞砸。比如:DDX控制PDX,IDC静态核心完成,m辅助显示完成;如果我更改IDC\u STATIC\u的名称,以前的名称将保留在某个位置。我不确定具体在哪里。也许这就是资源?