求助:'static_cast' : ambiguous conversions from 的问题!

wenqinwuhai 2010-07-18 09:38:26
'static_cast' : ambiguous conversions from 'class CMyCallBack *' to 'struct IDispatch *' 这是错误!环境是
class ATL_NO_VTABLE CMyCallBack : 
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IMyCallBack, &IID_IMyCallBack, &LIBID_ZlinkPhone>,
public CComControl<CMyCallBack>,
public IPersistStreamInitImpl<CMyCallBack>,
public IOleControlImpl<CMyCallBack>,
public IOleObjectImpl<CMyCallBack>,
public IOleInPlaceActiveObjectImpl<CMyCallBack>,
public IViewObjectExImpl<CMyCallBack>,
public IOleInPlaceObjectWindowlessImpl<CMyCallBack>,
public IPersistStorageImpl<CMyCallBack>,
public ISpecifyPropertyPagesImpl<CMyCallBack>,
public IQuickActivateImpl<CMyCallBack>,
public IDataObjectImpl<CMyCallBack>,
public IProvideClassInfo2Impl<&CLSID_MyCallBack, NULL, &LIBID_ZlinkPhone>,
public CComCoClass<CMyCallBack, &CLSID_MyCallBack>,
public IDispatchImpl<ISIPCallBack, &__uuidof(ISIPCallBack), &LIBID_AvCtrlLib, /* wMajor = */ 1, /* wMinor = */ 0>
BEGIN_COM_MAP(CMyCallBack)
COM_INTERFACE_ENTRY(IMyCallBack)
//COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY2(IDispatch, ISIPCallBack)
//COM_INTERFACE_ENTRY(ISIPCallBack)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(IQuickActivate)
COM_INTERFACE_ENTRY(IPersistStorage)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)

根据论坛的一些资料更改,但还是有问题。我用的是VC6.0。ISIPCallBack 是来自2003 atl编译的DLL组件。应该怎么更改让他编译成功啊!
mycallback.h(42) : error C2594: 'static_cast' : ambiguous conversions from 'class CMyCallBack *' to 'struct IDispatch *'
Generating Code...
Compiling...
Error executing cl.exe.
Creating browse info file...
...全文
325 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq727791967 2011-03-23
  • 打赏
  • 举报
回复
怎么解决的啊 说说
mengde007 2010-07-19
  • 打赏
  • 举报
回复
static_cast转换时,会把this指针加上或减去一定的偏移。你这么写让偏移有了多个值,因此才有了ambiguous 二意性质。
wenqinwuhai 2010-07-19
  • 打赏
  • 举报
回复
IMyCallBack ISIPCallBack 都是IDispatch 但我用了COM_INTERFACE_ENTRY2 。哪个地方用错了?
mengde007 2010-07-19
  • 打赏
  • 举报
回复
你所继承的一些接口或者类是不是也从IDispatch派生过来的,如果是的话,问题就在这儿了。
wenqinwuhai 2010-07-19
  • 打赏
  • 举报
回复
自己解决!结贴给分!
wenqinwuhai 2010-07-19
  • 打赏
  • 举报
回复
哪应该怎么更改一下?原始生成的结构是:

BEGIN_COM_MAP(CMyCallBack)
COM_INTERFACE_ENTRY(IMyCallBack)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY2(IDispatch, ISIPCallBack)//要加入ISIPCallBack
//COM_INTERFACE_ENTRY(ISIPCallBack)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(IQuickActivate)
COM_INTERFACE_ENTRY(IPersistStorage)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
//COM_INTERFACE_ENTRY2(IDispatch, ISIPCallBack)
//COM_INTERFACE_ENTRY(ISIPCallBack)
END_COM_MAP()

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧