本人使用MFC制作进程内组件,从CCmdTarget类派生出自己的类,此类实现一个IMathEx接口从IDispatch接口继承,实现接口函数,注册后,客户端使用CoCreateInstance函数创建组件,使用IID_MathEx时创建失败,而使用IID_IDispatch却可以,在CMathEx类的源文件中有如下代码:
  BEGIN_INTERFACE_MAP(CMathEx, CCmdTarget)
INTERFACE_PART(CMathEx, IID_IMathEx, Dispatch)
  END_INTERFACE_MAP()
接口ID的信息已经存入接口表中,但是为什么使用IID_MathEx时创建还是失败呢?

解决方案 »

  1.   

    class CMathEx :
          public IDispatchImpl< IMathEx, &IID_IMathEx, 
             &LIBID_MathExLib >,
          public CComObjectRoot,
          public CComCoClass< CBeeper, &CLSID_Beeper >
    {
       ...
    };
    BEGIN_COM_MAP(CMathEx)
       COM_INTERFACE_ENTRY(IDispatch)
       COM_INTERFACE_ENTRY(IMathEx)
    END_COM_MAP( )
      

  2.   

    public CComCoClass < CBeeper, &CLSID_Beeper > 改成...<CMathEx, &CLSID_MathEx>用模板实现IDispatch接口,然后加入映射表中.
      

  3.   

      楼上大哥,不是这样的,我使用的不是ATL框架,ATL我是知道怎么做的,但我现在使用的是MFC框架,但还是谢谢你的回答。