有关COM的问题:得到一个COM组件的DLL文件,如何编写程序取得文件中接口的有关信息:比如接口的ID,接口的方法、属性等。

解决方案 »

  1.   

    你可以选择菜单 component import activecontrol
    如果这个COM注册了
    你能直接在列表中就能找到这个COM生成的组件
    如果没有呢就create unit 
    然后选择这个DLL文件(最好是选择相应的TLB文件)
    如果它在制作时包括了相应的接口信息
    就可以生成一个***_TLB.pas文件
    这个文件可以直接use使用 
    有相应的接口类和接口(有些是以co***开头的)
    你直接可以create 使用
      

  2.   

    补充一下你在import active control时选择ADD
    然后再选择dll文件或TLB文件就行了
    最后用creatunit(COM组件有可能是非可视的) 或者install(如果是可视控件)
      

  3.   

    谢谢 Focus ,这个方法我知道,但我需要写个程序来获取这些信息,就类似Delphi所做的根据DLL或TLB文件得到***_TLB.pas文件的功能一样。
      

  4.   


    这样
    在COM中如果实现了IPropertyinfo接口就可以通过
    这个接口来得到COM中接口和属性的信息
    这个比较难
    而且相关资料少
    我无法帮到你了
      

  5.   

    这些信息一般都是用IDL描述的,除非实现了特定接口才能得到这些信息。
    我正在看COM本质论,帮你找找先。
      

  6.   

    先猜测一下:
    每个接口都会对应一个IUnknow接口,那么GUID肯定是可以通过IUnknow接口查询得到的了。
      

  7.   

    发现了!
    其实编译后的COM是包含了IDL定义的
    例如你TDUMP *.dll
    你将会看到IDL的描述
    但具体IDL格式的规范我还不清楚。
      

  8.   

    可以试试这个方法:打开类型库编辑器,在它的uses页面中单击右键显示全部,选中你的文件,点击保存就可得到
      

  9.   

    delphi中封装了这个接口
    IDispatch,假如在delphi中创建的com应该都有这个接口。
    通过这个接口可以得到你需要的信息。
      

  10.   

    在VC中已经有人答了
    是使用ILibType和相关的一些东西来得到
    相应的信息
    可以做到的
      

  11.   

    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了