一个关于ATL的问题
G_zcm 2001-11-30 09:56:25 IDL文件如下:
[
object,
uuid(CC26A9DD-7CB5-41F0-9F4D-6BAE25C93FD1),
dual,
helpstring("IFoo Interface"),
pointer_default(unique)
]
interface IFoo : IDispatch
{
};
[
object,
uuid(66842729-E94E-4c99-9796-3CA5AEE90DDF),
dual,
helpstring("IFoo2 Interface"),
pointer_default(unique)
]
interface IFoo2 : IDispatch
{
};
。。。。。。。。。。
coclass MultiInterface
{
[default] interface IFoo;
interface IFoo2;
};
// 类声明如下:
class ATL_NO_VTABLE CMultiInterface :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMultiInterface, &CLSID_MultiInterface>,
public IDispatchImpl<IFoo,&IID_IFoo,&LIBID_MULTIINTERFACEMODLib>,
public IDispatchImpl<IFoo2,&IID_IFoo2,&LIBID_MULTIINTERFACEMODLib>
// 编译时,下面的代码报错
BEGIN_COM_MAP(CMultiInterface)
COM_INTERFACE_ENTRY(IFoo)
COM_INTERFACE_ENTRY(IFoo2)
COM_INTERFACE_ENTRY(IDispatch)/*这句报ambiguous conversions from 'class CMultiInterface *' to 'struct IDispatch *'的错*/
END_COM_MAP()
如果我将:
interface IFoo2 : IDispatch{};
改为:interface IFoo2 : IUnknown{};
将
public IDispatchImpl<IFoo2,&IID_IFoo2,&LIBID_MULTIINTERFACEMODLib>
改为:
public IFoo2
编译就正常了,请问高手,这是为什么。
如果我想实现两个或多个从IDispatch继承来的接口,该如何处理。
谢谢!