COM呼叫没有返回,但可能崩溃?

时间:2015-02-27 01:11:01

标签: c++ com atl

我有一个使用COM与另一个第三方应用程序通信的应用程序。大多数时候一切都很好。

但偶尔对OpenPage()的调用会产生一些奇怪的行为。发生这种情况时,该功能就会中断。线程继续,但没有一个消息框出现。什么都不是"抛出"。而且没有迹象表明我身边有任何问题。

线程继续运行,除了从这里开始,CComPtr永远不会再返回,但不会挂起等待第三方的返回。 我知道线程继续,因为用户可以继续使用我的应用程序,它会调用相关的各种功能并进行跟踪。

我的问题是2倍。为什么会这样?是否主要是由于第三方申请中的某些内容?

如何添加一些代码来诊断?

m_spThirtPartyCComPtr

LRESULT Open()
{
    HRESULT hr;

    try 
    {
        hr = m_spThirdParty->OpenPage(&pObj->m_orderNumber);    
        Trace(hr);
    }
    catch (...)
    {
        Error();
        MessageBox(NULL, "Fail", "Fail", MB_OK);
    }

    if(FAILED(hr))
    {
        MessageBox(NULL, "Returned Fail", MB_OK);
        return 0;
    }

    MessageBox(NULL, "Success", "Success", MB_OK);
    return 0;
}

提前致谢!


WhozCraig:抱歉,我遗漏了一些代码。我在try块中检查hr。但它永远不会达到这一点。当问题发生时,它退出该功能。 - Eric C 12分钟前

MSalters:这就是问题所在。一旦我打电话给OpenPage,我就不知道发生了什么。我所知道的就是在我称之后,我得到了这种奇怪的行为 - Eric C 11分钟前

thang:抱歉,我遗漏了一些代码,试图简明扼要。我确实检查了hr的返回并将其记录在try块中,但是它总是会跳过该函数并退出函数而不执行其他操作

0 个答案:

没有答案