有一个EXE(独立进程)的COM组件类A ,创建并管理COM组件类B的接口Ib(B是进程内的),现在A的接口提供把Ib传给使用它的客户端的方法 HRESULT GetB(IUnknown ** ppIunk);但是这个IUnknown传过去后QueryInterface(__uuidof(Ib),...)出现了0x80020008不正确的变量类型错误,我知道这个功能肯定可以实现的,但就是找不到我在哪里犯了错误。希望有经验的朋友能给点提示。谢谢!

解决方案 »

  1.   

    而且在你的客户端编译的时候,编译器已经能够识别Ib的内存结构
    那么Ib的内存结构你是如何暴露给客户端的呢?的确,信息太少
      

  2.   

    项目代码很分散,很多,基本没办法贴阿,只能说明一下基本情况就是这样了:一个COM Exe工程有两个组件类,A 和 B ,因为类型库,Ia和Ib客户端都了解,但客户端并不直接创建B,而是让A去创建B,然后问A要B的接口Ib,问题是这个Ib我要不过来了我建立了一个简单模型项目可以完成跨com跨进程传递接口的事情,但是我的实际项目中确总是说类型错误0x80020008,实在找不出错误原因,希望在这里能碰碰运气,看看有谁碰到过同样的问题?
      

  3.   

    你要确认你的IID和接口指针正确。
    没有比较详细的代码,真的不好说。
      

  4.   

    Ia提供一个获得接口的方法类似于这样  
    HRESULT GetRender([in] long dwId, [out] IUnknown ** ppUnk);客户程序能够得到这个IUnknown,像这样,但是始终QueryInterface不到IbCComPtr<IUnknown> spUnk;
    HRESULT hr = S_OK;
    hr = IA->GetRender(dwId, &spUnk);
    if(SUCCEEDED(hr))
    {
    CComPtr<Ib> spIB;
    hr = spUnk.QueryInterface(&spIB);  //这里始终返回0x80020008错误

    if(SUCCEEDED(hr))
    {
         spIB->Start();
    }
    }
      

  5.   

    晕,真难啊,想出现和你同样的错误真难啊估计是你这内部写的有问题
    hr = IA->GetRender(dwId, &spUnk);代码多,代码乱?晕,用了COM自找麻烦
    3层架构没意义了