有关COM的问题:得到一个COM组件的DLL文件,如何编写程序取得文件中接口的有关信息

jingpingyi 2003-06-07 03:31:35
有关COM的问题:得到一个COM组件的DLL文件,如何编写程序取得文件中接口的有关信息:比如接口的ID,接口的方法、属性等。
...全文
87 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
发现了!
其实编译后的COM是包含了IDL定义的
例如你TDUMP *.dll
你将会看到IDL的描述
但具体IDL格式的规范我还不清楚。
PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
先猜测一下:
每个接口都会对应一个IUnknow接口,那么GUID肯定是可以通过IUnknow接口查询得到的了。

PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
这些信息一般都是用IDL描述的,除非实现了特定接口才能得到这些信息。
我正在看COM本质论,帮你找找先。
PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
Methods in Vtable Order
IUnknown Methods Description
QueryInterface Returns pointers to supported interfaces.
AddRef Increments reference count.
Release Decrements reference count.

IPropertyBag Methods Description
Read Called by the control to read a property from the storage provided by the container.
Write Called by the control to write each property in turn to the storage provided by the container.

以上是msdn的一段描述,看来IPropertyBag 是直接继承IUnknown 的,并保存了部分信息,好像还能得到错误信息等等。
看来大部分的编译器都对此进行了封装。
一般来讲,接口不一致的话只能通过偏移量来得到接口地址了,反正最前端的肯定是IUnknown了
PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
delphi中封装了这个接口
IDispatch,假如在delphi中创建的com应该都有这个接口。
通过这个接口可以得到你需要的信息。

PhilexPei 2003-06-09
  • 打赏
  • 举报
回复
错了,继续帮你找,这个问题确实有点意思啊
HanJingJingHan 2003-06-09
  • 打赏
  • 举报
回复
可以试试这个方法:

打开类型库编辑器,在它的uses页面中单击右键显示全部,选中你的文件,点击保存就可得到
jingpingyi 2003-06-07
  • 打赏
  • 举报
回复
谢谢 Focus ,这个方法我知道,但我需要写个程序来获取这些信息,就类似Delphi所做的根据DLL或TLB文件得到***_TLB.pas文件的功能一样。
蓝色光芒 2003-06-07
  • 打赏
  • 举报
回复
UP

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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