接口与该接口的实现类怎么转换
接口与该接口的实现类如何转换
ATL COM中,如何将一个接口转换具体的实现类?
------解决方案--------------------
实现类首先要响应该接口的IDD请求,一般通过BEGIN_COM_MAP() COM_INTERFACE_ENTRY()宏
然后一般应该继承该接口,实现该接口的方法,具体步骤参考ATL internals
------解决方案--------------------
这是不正确的,你的写法是C++的dynamic cast写法,ATL的服务对象是不确定的,可以使C++,也可以是VB,C#...
ATL中只能调用接口method,因为CA最多只有IB的头文件(甚至有时候还没有),没有CB的头文件;因为一旦CA有了CB的头文件,就无法做到代码保密和二进制相容.
如果你的CB实现了2个接口IB和IB2,那么可以通过queryinterface()访问到IB2
ATL COM中,如何将一个接口转换具体的实现类?
------解决方案--------------------
实现类首先要响应该接口的IDD请求,一般通过BEGIN_COM_MAP() COM_INTERFACE_ENTRY()宏
然后一般应该继承该接口,实现该接口的方法,具体步骤参考ATL internals
------解决方案--------------------
这是不正确的,你的写法是C++的dynamic cast写法,ATL的服务对象是不确定的,可以使C++,也可以是VB,C#...
ATL中只能调用接口method,因为CA最多只有IB的头文件(甚至有时候还没有),没有CB的头文件;因为一旦CA有了CB的头文件,就无法做到代码保密和二进制相容.
HRESULT CA::DoSome(IB* b){
b->AddRef();
b->doXXX();
b->Release();
return S_OK;
}
如果你的CB实现了2个接口IB和IB2,那么可以通过queryinterface()访问到IB2
HRESULT CA::DoSome2(IB* b){
IB2* b2;
if(SUCCEED(b->QueryInterface(IID_IB2,&b2)){
b2->doXXX2();
b2->Release();
}else{return E_XXX;}
}