弱弱的问题:在组件内部如何从接口指针得到实现该接口的类对象指针?

ciml 2004-07-21 02:14:02
因为多个对象可能实现同一接口,所以强制转换肯定是有问题的。
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kvls 2004-07-22
  • 打赏
  • 举报
回复
没有做过,但你可以试试:
在COM的MFC实现中,接口的函数访问该接口实现类指针的方法是通过计算类中偏移量获取的,那么是否可以专门在接口中定义一个函数来获取这个指针呢?
firmbird 2004-07-22
  • 打赏
  • 举报
回复
接口可以被多个对象实现,但是对于一个接口指针,在某一时刻却是跟唯一一个对象关联的。
你这样想好了,接口无非是对象的一个基类,基类的指针你说可不可以强制转换成子类的指针???
ciml 2004-07-22
  • 打赏
  • 举报
回复
强制转换肯定是不对的,存在歧义,比如一个接口被多个对象实现。
蒋晟 2004-07-22
  • 打赏
  • 举报
回复
你应该实现IServiceProvider::QueryService来实现其他对象的访问
firmbird 2004-07-22
  • 打赏
  • 举报
回复
去看一下这个宏,或许有帮助
COM_INTERFACE_ENTRY_FUNC( iid, dw, func )
ciml 2004-07-22
  • 打赏
  • 举报
回复
我没有想到这居然成为了一个问题,难道ATL中没有相关的辅助类来支持?
想想看,在一套复杂的对象模型库中,这种情况是非常普遍的啊。
firmbird 2004-07-21
  • 打赏
  • 举报
回复
强制转换应该可以的,但是这样就违反了COM的原则。
ciml 2004-07-21
  • 打赏
  • 举报
回复
我的意思是:假如我的CA类实现了IA接口,在内部有个CB类有一个IA *类型的
数据成员,那么在CB类的某些方法中,为了访问CA类的成员函数(这些函数不
是IA的接口函数),我如何通过IA *得到CA *以访问CA类的公有函数呢?
blestrabbit 2004-07-21
  • 打赏
  • 举报
回复
你用QueryInterface()应该可以的,接口之间是可以互相访问的。

3,245

社区成员

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

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