我用ATL向导生成COM,插入了两个ATL Object,分别为A,B。我希望B对象,继承接口A,并实现。于是,我修改了B的继承关系,如下所示(*修改后的继承关系*)
可总是有这样的错误提示:
//错误提示
d:\temporary folder\exam2\b.h(28) : error C2594: 'static_cast' : ambiguous conversions from 'class CB *' to 'struct IDispatch *'
//错误提示
请问:
为什么会出现这样的错误?如果这样继承不对,该如何继承呢???
//*修改后的继承关系*
class ATL_NO_VTABLE CB :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CB, &CLSID_B>,
public IDispatchImpl<IB, &IID_IB, &LIBID_EXAM2Lib>,
public IA //手动添加部分
{
public:
CB()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_B)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CB)
COM_INTERFACE_ENTRY(IB)
COM_INTERFACE_ENTRY(IA)//手动添加部分
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()// IB
public:
};#endif //__B_H_
可总是有这样的错误提示:
//错误提示
d:\temporary folder\exam2\b.h(28) : error C2594: 'static_cast' : ambiguous conversions from 'class CB *' to 'struct IDispatch *'
//错误提示
请问:
为什么会出现这样的错误?如果这样继承不对,该如何继承呢???
//*修改后的继承关系*
class ATL_NO_VTABLE CB :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CB, &CLSID_B>,
public IDispatchImpl<IB, &IID_IB, &LIBID_EXAM2Lib>,
public IA //手动添加部分
{
public:
CB()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_B)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CB)
COM_INTERFACE_ENTRY(IB)
COM_INTERFACE_ENTRY(IA)//手动添加部分
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()// IB
public:
};#endif //__B_H_
解决方案 »
- 常用的数据存储格式
- 静态函数访问非静态成员的问题
- 驱动新手,例子编译。请教???
- 求教各位牛人IHTMLDocument2获取内嵌框架问题
- 在richedit中插入HBITMAP的问题。直接插入可以,但我创建一个线程在线程中插入就报错。急!!
- 键盘钩子里int nCode,WPARAM wParam,LPARAM lParam这几个参数是怎样的?
- 如何把一堆类文件转为dcom
- 无窗口控件的动态创建方法
- vc串口编程 协议
- 我要在VC中读取JPEG图象文件,以将其打印出来,可不知道jpeg格式,谁可以帮我?
- 急!如何实现vc6进程与vb.net的进程间通信?在线等待
- 传送和接收大量数据,是使用进程好,还是线程好呢?为什么?
BEGIN_COM_MAP(CB)
//COM_INTERFACE_ENTRY(IB) //手动屏蔽掉
COM_INTERFACE_ENTRY2(IDispatch,IB)//手动
COM_INTERFACE_ENTRY(IA)//手动添加部分
END_COM_MAP()
给你个例子:
idl:
import "oaidl.idl";
import "ocidl.idl"; [
object,
uuid(DD70A5F5-A411-459a-B54C-05F8CF56E791),
dual,
helpstring("IRTI1 Interface"),
pointer_default(unique)
]
interface IRTI1 : IDispatch //手动
{
};
[
object,
uuid(3F7E1AE7-FDC2-41D6-8AC6-F24BECCA3F44),
dual,
helpstring("IRTI Interface"),
pointer_default(unique)
]
interface IRTI : IDispatch
{
};[
uuid(5F090D9A-8E8A-4EA7-AA92-2D7E03238146),
version(1.0),
helpstring("MuitInterface 1.0 Type Library")
]
library MUITINTERFACELib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb"); [
uuid(D096EC0F-CBB6-4286-B453-695B6E0FBD41),
helpstring("RTI Class")
]
coclass RTI
{
[default] interface IRTI;
interface IRTI1; //手动
};
};.h:
// RTI.h : Declaration of the CRTI#ifndef __RTI_H_
#define __RTI_H_#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////////
// CRTI
class ATL_NO_VTABLE CRTI :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CRTI, &CLSID_RTI>,
public IDispatchImpl<IRTI, &IID_IRTI, &LIBID_MUITINTERFACELib>,
public IDispatchImpl<IRTI1, &IID_IRTI1, &LIBID_MUITINTERFACELib>//手动
{
public:
CRTI()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_RTI)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CRTI)
//COM_INTERFACE_ENTRY(IRTI) //手动
COM_INTERFACE_ENTRY2(IDispatch,IRTI) //手动
COM_INTERFACE_ENTRY(IRTI1) //手动
END_COM_MAP()// IRTI
public:
};#endif //__RTI_H_
没问题的!哈哈