请教COM异常处理相关问题? 我编写了一个COM组件,有两个daul接口IA和IB,如何让两个接口都能使用Error返回错误? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 COM的Error反馈机制是关联于线程的,无所谓几个接口都可以操作该线程的错误机制。 但是当我编写一个组件要实现两个接口IA和IB,由于ATL生成的InterfaceSupportsErrorInfo实现为:STDMETHODIMP CA::InterfaceSupportsErrorInfo(REFIID riid){ static const IID* arr[] = { &IID_IA }; for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE;}此时在IB函数中的函数return Error(...);后,在调用组件时仍然无法截获IB的异常。请问这是由于IB不支持InterfaceSupportsErrorInfo么?那么如何解决这个问题,使得组件中的两个接口都能够正常的返回错误报告? 我记得刚才有人给你回答过了,你是又开帖子了吗?答案:原: static const IID* arr[] = { &IID_IA };改为 static const IID* arr[] = { &IID_IA, &IID_IB }; #include "*_i.c"把你那个.c文件#include进去就行了。或者声明extern IID IB;这是正解。 VC活动目录中新建用户 如何给工具栏按钮加提示符? CTreeCtrl节点刷新,怎么保持状态? 两段负责输入输出的代码求解,在unicode编码下的乱码问题。 CreateEvent的意思? 问一个汉字编码的问题 关于存储过程:VC中如何创建存储过程,并调用存储过程? 青岛都有什么好的企业呀,薪水高,福利好的 BCG公司又出新品,大家来关心一下 BCGPEdit 见笑了,这是我的第一个发布的软件,请指教!http://www.csdn.net/cnshare/soft/10/10423.shtm 如何通过点击一个按扭来直接打开这日志 请教ACE与C++标准库冲突问题,,VC6.0,
STDMETHODIMP CA::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IA
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
此时在IB函数中的函数return Error(...);后,在调用组件时仍然无法截获IB的异常。请问这是由于IB不支持InterfaceSupportsErrorInfo么?那么如何解决这个问题,使得组件中的两个接口都能够正常的返回错误报告?
答案:
原:
static const IID* arr[] =
{
&IID_IA
};
改为
static const IID* arr[] =
{
&IID_IA,
&IID_IB
};