COleDispatchDriver ::在MFC应用程序中调用导致61706"内存不足"使用VS2013的例外情况?

时间:2017-10-04 20:33:59

标签: mfc out-of-memory invoke ole coff

我在Win7上运行的MFC C ++应用程序使用VS2013重建。它使用自定义OCX控件。在关于第四次调用OCX时,COleDispatchDriver :: InvokeHelper方法调用Invoke,这会导致异常61706" Insufficient Memory"。此应用程序已在以前版本的Visual Studio上成功构建并运行多年(不确定它最初是与哪个一起构建的)。来自生成异常的应用程序代码的调用是:

m_Sig1.LCDWriteString( 0, 2, 100, 100, 0, 0, 0, "Testing 123" );

我已经进入此调用并通过Invoke大约4级深入并在库dll中调用此调用oledisp2.cpp

void COleDispatchDriver::InvokeHelperV(DISPID dwDispID, WORD wFlags,
    VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, va_list argList)
. . .
    // make the call
    SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags,
        &dispparams, pvarResult, &excepInfo, &nArgErr);

状态码sc返回为0x80020009,即DISP_E_EXCEPTION,表示"发生异常"和例外信息是:

exceptInfo
    wCode = 61706
    bstrSource = "SigPlus"
    bstrDescription = "Insufficient memory to perform operation."
    bstrHelpFile = 0
    scode = 0

我试图进入 m_lpDispatch-> Invoke 调用,但是调试器只显示汇编语言,说没有被调用模块的符号信息,这似乎很奇怪,因为它是调用来自同一类(或父类)的成员。当我逐步调试InvokeHelper方法时,我观察到所有8个传递的参数都被正确识别和处理,直到调用Invoke()为止。无法进入Invoke使得无法查看导致“内存不足”的内存分配的位置。问题。

我也尝试使用VS2010构建并获得相同的错误。

我尝试过的其他事情是从静态MFC库切换到DLL MFC,但结果是一样的。我仍然得到"内存不足"错误,无法使用符号调试Invoke()调用。

我已尝试查找61706错误以获取Microsoft的详细说明,但只发现此link信息量不大。

0 个答案:

没有答案