在vc中通过import导入组件,然后用智能指针创建了组件,这个组件继承了我定义的一个C++接口A,并将A作为应用程序中另外一个C++接口B的构造函数参数,我想将这个组件直接作为参数(强制转换)传入接口B的构造函数中,
ATL组件实现类继承了自定义C++接口A :   CMyCom:IA 
import导入组件的智能指针:IMyComPtr pMyCom;自定义C++接口A:   IA
自定义C++接口B:   IB(IA);CMyCom  myCom;我想这样做   IB(myCom);问题是我怎样才能由 pMyCom 得到myCom?

解决方案 »

  1.   

    COM就是为了隐藏类的细节才会用接口的,你这样又用了类的话,就与使用com的原意违背了
    当然,你可以用pMyCom->QueryInterface(IID_Unknown),在这里要处理好CMyCom里的QueryInterface,这样就可能得到CMyCom的指针了
      

  2.   

    “这样就可能得到CMyCom的指针了”,到底能不能啊?
      

  3.   

    你可以在QueryInterface中定义一个IID_XXX,当iid==IID_XXX就直接返回this指针,不要用static_cast,这样试试
      

  4.   

        /*
        * IUnknown::QueryInterface() implementation
        */
        STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)
        {
            if(ppvObject == NULL)
            {
                return E_POINTER;
            }
            else if(riid == IID_IUnknown ||
                riid == IID_IDispatch)
            {
                *ppvObject = (void*) this;
                AddRef();
                return S_OK;
            }
            else
            {
                return E_NOINTERFACE;
            }
        }
      

  5.   

    获得不了onmousewheel的搞定了,哎,还是自己搞定了,编辑器默认生成的代码是错误的,需要手动添加消息,并修改代码,消息加在ATL_MSG_MAP 后面就ok了