接口与该接口的实现类怎么转换

接口与该接口的实现类如何转换
ATL COM中,如何将一个接口转换具体的实现类?
------解决方案--------------------
实现类首先要响应该接口的IDD请求,一般通过BEGIN_COM_MAP() COM_INTERFACE_ENTRY()宏
然后一般应该继承该接口,实现该接口的方法,具体步骤参考ATL internals

------解决方案--------------------
引用:
譬如有2个接口IA和IB,他们的具体实现类是CA,CB。IA有个方法为DoSome(IB *b),想在这个方法中将IB转换为CB。
STDMETHODIMP CA::DoSome(IB *b)
{
CB *myB = (CB*)b;//这样是正确的吗?要是不正确该如何转换
}

这是不正确的,你的写法是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;}
}