InvokeHelper调用引发异常


代码原来的实现是
try
{
InvokeHelper(...)
}
catch(...)
{
GetLastError();
}


好吧,引发了异常,但是GetLastError()永远为零。
状况了,网上又找不到相关资料。
知道自己一步一步地从InvokeHelper跟踪进去。
发现里面有这样的代码
COleDispatchException* pException =
new COleDispatchException(NULL, 0, excepInfo.wCode);
ASSERT(pException->m_wCode == excepInfo.wCode);
if (excepInfo.bstrSource != NULL)
{
pException->m_strSource = excepInfo.bstrSource;
SysFreeString(excepInfo.bstrSource);
}
if (excepInfo.bstrDescription != NULL)
{
pException->m_strDescription = excepInfo.bstrDescription;
SysFreeString(excepInfo.bstrDescription);
}
if (excepInfo.bstrHelpFile != NULL)
{
pException->m_strHelpFile = excepInfo.bstrHelpFile;
SysFreeString(excepInfo.bstrHelpFile);
}
pException->m_dwHelpContext = excepInfo.dwHelpContext;
pException->m_scError = excepInfo.scode;


// then throw the exception
THROW(pException);


最后THROW(pException);把相关的异常代码抛出来了,当然也在这段代码中LastError变成0了。
知道原因,改代码就简单了:
try
{
InvokeHelper(...)
}
catch (COleDispatchException* pException)
{
CString strErrorMsg;
pException->GetErrorMessage(strErrorMsg.GetBuffer(256), 256);
strErrorMsg.ReleaseBuffer();
AfxMessageBox(strErrorMsg);
}


总结:不同的异常最好先有不同的catch()处理,最后才catch(...)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值