关于COM的使用:不知道interface可以使用COM吗?

MulinB 2008-03-10 11:57:58
本人刚刚开始接触COM,想问个关于COM使用的问题:
已知COM使用方式:
ISomeInterface* pInstance = ...; //get an instance of a certain class which implements the ISomeInterface.

pInstance->DoSomething();

想问的是:
如果不知道ISomeInterface能动态使用COM吗?也就是说,有个第三方的COM,可以获得其IDL,但是我的程序不知道它的Interface,我的程序也无法重新编译,能动态重用这个COM吗?


请比较了解COM的人指点,本人初学COM。

另外:其他语言如何使用COM?可否举些代码例子?比如Java, javascript等。
...全文
134 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
scq2099yt 2008-03-10
  • 打赏
  • 举报
回复
应该可以
  • 打赏
  • 举报
回复
比较麻烦的
MulinB 2008-03-10
  • 打赏
  • 举报
回复
好,回头我查查IDispatch...


不知道这种传参方法是不是比较麻烦。。。
  • 打赏
  • 举报
回复
先拿到typeinfo
IDispatch::GetTypeInfoCount
IDispatch::GetTypeInfo

再得到ID,其中name在typeinfo中有
IDispatch::GetIDsOfNames

最后调用
IDispatch::Invoke
eduyu 2008-03-10
  • 打赏
  • 举报
回复
所有COM接口指针在C++下都是虚函数表指针。
理解虚表,一切都好办了。
MulinB 2008-03-10
  • 打赏
  • 举报
回复
比如用IDispatch的话,怎么使用?
MulinB 2008-03-10
  • 打赏
  • 举报
回复
能不能给些代码?
yyunffu 2008-03-10
  • 打赏
  • 举报
回复
关注!
eduyu 2008-03-10
  • 打赏
  • 举报
回复
>>可以获得其IDL,但是我的程序不知道它的Interface
IDL中文翻译过来就是接口定义语言,知道IDL就是知道了他的Interface。
china_bai 2008-03-10
  • 打赏
  • 举报
回复
如果知道了IDL,而且对方又是一个实现了标准接口的COM的话,应该可以。
jameshooo 2008-03-10
  • 打赏
  • 举报
回复
你的程序无法重新编译,这个要求也太严格了吧,即使组件实现了IDispatch,但如果更改了接口,连脚本语言也得改代码,更何况你的程序。
  • 打赏
  • 举报
回复
如果对方实现了IDispatch接口,那么你就可以动态调用了。
脚本语言和VB6都是使用这种方式调用的。

3,245

社区成员

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

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