我编写了一个COM组件,有两个daul接口IA和IB,如何让两个接口都能使用Error返回错误?

解决方案 »

  1.   

    COM的Error反馈机制是关联于线程的,无所谓几个接口都可以操作该线程的错误机制。
      

  2.   

    但是当我编写一个组件要实现两个接口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么?那么如何解决这个问题,使得组件中的两个接口都能够正常的返回错误报告?
      

  3.   

    我记得刚才有人给你回答过了,你是又开帖子了吗?
    答案:
    原:
       static const IID* arr[] = 
        {
            &IID_IA
        };
    改为
       static const IID* arr[] = 
        {
            &IID_IA,
            &IID_IB
        };
      

  4.   

    #include "*_i.c"把你那个.c文件#include进去就行了。或者声明extern IID IB;这是正解。