我有一个函数调用另一个函数,这会在返回调用函数时导致以下运行时检查失败:
运行时检查失败#0 - 未正确保存ESP的值 跨函数调用。这通常是调用函数的结果 声明了一个调用约定并声明了一个函数指针 与不同的召集惯例。
GridCtrl类:
class CNJAGridCtrl : public CWnd
调用功能代码:
LRESULT CNJAGridCtrl::OnUpdateCell(WPARAM wParam, LPARAM lParam)
{
if (!(BOOL)wParam)
{
return true;
}
if (!m_bAllowUpdate)
{
return true;
}
NJACELLINFO *pDisp = (NJACELLINFO*)lParam;
NJACELLINFO sDisp;
sDisp.m_bFormatOnly = TRUE;
sDisp.m_iColumn = pDisp->m_iColumn;
sDisp.m_lLine = pDisp->m_lLine;
GetDimensions(&sDisp);
sDisp.m_csText = pDisp->m_csText;
BeginWaitCursor();
UpdateCell(m_ctlLine.IsCurrentAddLine(), pDisp);//Function call with issue
m_ctlSheet.InvalidateLine(sDisp.m_lLine, sDisp.m_lLine);
EndWaitCursor();
return true;
}
被调用的函数类:
class CGridProdReport : public CNJAGridCtrl
和代码:
void CGridProdReport::UpdateCell(BOOL bAdd,NJACELLINFO sDisp)
{
//Crashes even without any code
}
我不知道为什么会这样。编译器设置为全面使用__cdecl。