我有一个使用COM与另一个第三方应用程序通信的应用程序。大多数时候一切都很好。
但偶尔对OpenPage()
的调用会产生一些奇怪的行为。发生这种情况时,该功能就会中断。线程继续,但没有一个消息框出现。什么都不是"抛出"。而且没有迹象表明我身边有任何问题。
线程继续运行,除了从这里开始,CComPtr
永远不会再返回,但不会挂起等待第三方的返回。
我知道线程继续,因为用户可以继续使用我的应用程序,它会调用相关的各种功能并进行跟踪。
我的问题是2倍。为什么会这样?是否主要是由于第三方申请中的某些内容?
如何添加一些代码来诊断?
m_spThirtParty
是CComPtr
。
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块中,但是它总是会跳过该函数并退出函数而不执行其他操作