我现在在写一个dll,其中有一个函数由外部调用,传进来一个IDispatch指针,如下:
STDMETHODIMP CVSFlxGdPxy::SetObjectToProxyFor(IDispatch *pDisp)
{
...
IVsFlexGridPtr * pFlexGrid = pDisp;
...
}这个赋值语句失败,导出pDisp接口的dll实现了IVsFlexGrid这个接口,其实就是vsflexgrid8.ocx,我想通过IDispatch 借口去访问属性,但是在接口转换的时候失败了,请高手帮忙看看,谢谢!

解决方案 »

  1.   

    CComQIPtr<IVsFlexGridPtr> pFlexGrid = pDisp;
      

  2.   

    queryInterface这个好像不行,只能查到IUnknown接口,查不到IVsFlexGrid接口
      

  3.   

    你必须修改你的COM组件的QueryInterface方法,或者在接口映射宏里面添加你的这个接口
      

  4.   

    这个com组件不是我们开发的,可以获得ITypeInfo信息,但是进一步调用GetTypeAttr函数获得TYPEATTR信息时失败,这是怎么回事,再线等
      

  5.   

    出现这种情况是不是QueryInterface中没有实现转换,或者没有实现这个接口,Iispatch接口是自动实现的
      

  6.   

    如果是从IDispatchImpl继承的,那就是漏掉了在接口宏里面的接口定义
    BEGIN_COM_MAP(CVsFlexGridPtr)
    COM_INTERFACE_ENTRY(IVsFlexGridPtr) // 或者下面一句,用一个就可以了
    COM_INTERFACE_ENTRY2(IDispatch, IVsFlexGridPtr)
    END_COM_MAP()