C++ 调用函数accross classes会导致运行时检查失败0-ESP的值未正确保存
我有一个函数调用另一个函数,返回调用函数时会导致以下运行时检查失败: 运行时检查失败0-ESP的值未正确保存 跨越函数调用。这通常是调用函数的结果 使用一个调用约定声明,并声明函数指针 使用不同的呼叫约定 GridCtrl类:C++ 调用函数accross classes会导致运行时检查失败0-ESP的值未正确保存,c++,mfc,runtime-error,calling-convention,C++,Mfc,Runtime Error,Calling Convention,我有一个函数调用另一个函数,返回调用函数时会导致以下运行时检查失败: 运行时检查失败0-ESP的值未正确保存 跨越函数调用。这通常是调用函数的结果 使用一个调用约定声明,并声明函数指针 使用不同的呼叫约定 GridCtrl类: class CNJAGridCtrl : public CWnd 调用函数代码: LRESULT CNJAGridCtrl::OnUpdateCell(WPARAM wParam, LPARAM lParam) { if (!(BOOL)wParam)
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
}
我不知道为什么会这样。编译器设置为全面使用uu cdecl。不需要在标题中添加标记。void CNJAGridCtrl::UpdateCell是如何声明的?virtual void CNJAGridCtrl::UpdateCellBOOL bAdd,NJACELLINFO sDisp{/**虚拟函数-不要删除!!!}我认为将参数更改为&sDisp可能已经对其进行了排序,但我不知道为什么。。。