C++ 调用函数accross classes会导致运行时检查失败0-ESP的值未正确保存

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)

我有一个函数调用另一个函数,返回调用函数时会导致以下运行时检查失败:

运行时检查失败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
}

我不知道为什么会这样。编译器设置为全面使用uu cdecl。

不需要在标题中添加标记。void CNJAGridCtrl::UpdateCell是如何声明的?virtual void CNJAGridCtrl::UpdateCellBOOL bAdd,NJACELLINFO sDisp{/**虚拟函数-不要删除!!!}我认为将参数更改为&sDisp可能已经对其进行了排序,但我不知道为什么。。。