请问COM能否实现多态?

beanders 2005-03-25 11:31:11
我想用COM对象 封装 三种设备对象 ,而这三种设备 又具备一定的共性,所以我想从 一个共同的基类继承.
另外, 将来客户程序操作的时候,我希望能用一个对象指针来操作这 三种对象(比如调用这三种对象的函数,而这个函数在三种对象中同名), 请问该怎么实现?

谢谢
...全文
124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beanders 2005-03-28
  • 打赏
  • 举报
回复
to weirdy(远古传说)
请问更改哪里?
我用向导定义了一个 IDevice 接口,然后手动定义了一个IDeviceA接口
在VB中, 当我输入 '.' 的时候它只出现了一个 Device 和 IDevice,尽管 IDeviceA也是可用的,但为什么不能出现?我希望IDeviceA也能象IDevice一样 把前面那个 'I'省略掉,请问该怎么做?
谢谢
xenke 2005-03-28
  • 打赏
  • 举报
回复
1.VB不是脚本,IDispath继承自 IUnknown
2,更改.idl文件中相应的名字
beanders 2005-03-28
  • 打赏
  • 举报
回复
to 各位老大,可能我没讲清楚,所以耽误大家时间了
昨天研究了一下 <Dr. GUI on Components, COM, and ATL> 实现了我的目的:
用向导定义了一个接口和它的实现类, 手动添加了 3个接口,并 让原来的实现类多重继承自这三个接口,
关于多态,参考了《ATL技术内幕》:实现类里 定义了三个不同的计算函数,在三个接口中分别定义了3个声明完全相同的 计算函数(直接调用 自己的计算函数),和三个不同名称的 计算函数(纯虚函数,对应实现类里的3个函数)

一点疑问:
1 我看书上都说 IDispath接口是为了给脚本语言用的,但我的三个接口都继承自 IUnknown,VB照样能用,这是为什么?
2 我想更改接口在VB中显示的名字,应该怎么做?谢谢
beanders 2005-03-27
  • 打赏
  • 举报
回复
to sjcode(COM就是爱)
请详细些吧
有代码吗?谢谢
beanders 2005-03-27
  • 打赏
  • 举报
回复
up
sjcode 2005-03-27
  • 打赏
  • 举报
回复
我的mail是sj.code@gmail.com

发邮件给我
hw110 2005-03-26
  • 打赏
  • 举报
回复
可以定义一个基接口啊,然后其他三个具体接口从此基接口派生
beanders 2005-03-26
  • 打赏
  • 举报
回复
btw:我得客户程序可能是 VB
设置参数 和 调用计算程序 不是同一个 程序模块做的, 将来应该是 硬件访问程序 来设置 设备的参数 , 显示程序来 调用计算程序,获得计算结果

谢谢
beanders 2005-03-26
  • 打赏
  • 举报
回复
to 两位老大
我想的是运行时的多态

我想实现这样:
实现一个 设备群对象, 客户程序通过设备群对象 得到一个 设备数组 or 设备链表, 这三种设备就存放在这个数组里 ,客户通过 基类指针 访问这个数组中的单元,来得到这个设备的编号,以及确定这个对象是哪种设备, 然后 通过具体设备的指针来设置 具体设备的参数, 设置好参数后, 就可以通过 基类指针调用 基类实现的一个虚函数 来完成不同的计算
不知道我说得是否明白
谢谢
sjcode 2005-03-26
  • 打赏
  • 举报
回复
你可以定一个共性的接口,让这三个类分别实现这个接口的函数。

通过queryInterface来转换接口指针类型,完成客户端的调用.
wshcdr 2005-03-26
  • 打赏
  • 举报
回复
COM的C实现就是用 用纯虚函数来实现的,多态当然一点问题都没有.

3,245

社区成员

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

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