描述:
自己用atl做的com DLL,里面实现了两个接口,客户程序通过#import引入com
在生成的.tlh文件中相关的接口定义如下
struct /* coclass */ TestAtlcom;
struct __declspec(uuid("6c1a39cb-3183-4b32-bf8e-0ffc26e801c6"))
/* dual interface */ ITestAtlcom;
struct /* coclass */ TestAtlcom2;
struct __declspec(uuid("0ea750ba-fdb0-4291-9a9d-ae2e6d9bf1a0"))
/* dual interface */ ITestAtlcom2;
//
// Smart pointer typedef declarations
//
_COM_SMARTPTR_TYPEDEF(ITestAtlcom, __uuidof(ITestAtlcom));
_COM_SMARTPTR_TYPEDEF(ITestAtlcom2, __uuidof(ITestAtlcom2));
//客户程序中我是这样用的
//首先声明
ITestAtlcomPtr m_Iatl;
ITestAtlcom2Ptr m_Iatl2;
//对于m_Iatl
m_Iatl.CreateInstance(__uuidof(TestAtlcom)) //这是成功的
//对于m_Iatl2,我想利用一下QueryInterface
m_Iatl.QueryInterface(__uuidof(TestAtlcom2),(void**)&m_Iatl2);
//上面的做法怎么也得不到接口m_Iatl2,错在哪里我不太清楚,请高手指点
//另外我也试了下面的办法,还是错
m_Iatl->QueryInterface(__uuidof(ITestAtlcom2),(void**)&m_Iatl2);
解决方案1:
TestAtlcom是ITestAtlcom的工厂。如果想用QueryInterface返回ITestAtlcom2,TestAtlcom必须实现ITestAtlcom2。
也就是说,或者ITestAtlcom继承ITestAtlcom2,或者TestAtlcom同时继承ITestAtlcom和ITestAtlcom2。
ITestAtlcom2 *m_Iatl2;
ITestAtlcom2 m_Iatl2;
您可能想查找下面的文章:
- 如何修改ATL自动生成的COM方法呢?比如QueryInterface,CreateInstence
- 重写QueryInterface,AddRef,Release应该注意些什么?我这段代码怎么总是有问题。
- 使用COM组件时,QueryInterface调用失败是什么原因
- tempRs->QueryInterface__uuidof_Recordset,voidm_Recordset编译没错,vb调用报自动化错误
- 在线等待关于queryinterface的问题
- 关于QueryInterface,求助啊!
- 奇怪:成功激活也能成功调用,为什么queryinterface查询第二个接口报告“拒绝访问”?
- 为什么Queryinterface返回的IUnknown指针总是相同的
- 求QueryInterface例子
- 请问QueryInterface有什么用呢?