我初学com,有些问题对大家来说可能很简单,可是我不懂现在急于解决如下5个问题1、我知道某一个COM文件,如何获得其CLSID(我并不知道这个COM叫什么)
2、我怎么枚举一个com组件里的所有接口?(即我知道一个组件的CLSID,如何枚举获得其内部的所有interface)
3、我知道某个组件,也知道其中的"IAbcde"这个接口,如何在CoCreateInstance里使用?组件的CLSID我是用CLSIDFromString获得的,但是IAbcde的IID我没办法用IIDFromString获得。(请告诉我除了用#import外的方法,也就是说我要动态获得)
4、我如何象OLEView那样,枚举获得某个接口中的所有属性、方法、事件
5、我如何象OLEView那样,枚举获得某个接口中的所有属性、方法、事件的详细参数和返回值
我不知道这些问题是不是过份,大家帮我一起up一样,如果有知道的,帮忙指条路谢谢一个问题30分,一共5个问题150分,另外50分给up的人分不够可以再加,我现在只能出200分

解决方案 »

  1.   

    1 注册的com组建可以查注册表找guid2 http://www.5ivb.net/Info/95/Info31533/
    这是.net下的用法,应该可以套用,未经验证
      

  2.   

    如果接口支持IDispatch,可以的到有关的属性和方法。
      

  3.   

    OLEView也就是查注册表得到的这些信息
      

  4.   

    在MSDN中查一下LoadTypeLib Sample或者TiBrowser.
    你要得所有东西都应该可以读typelib得到GOOD LUCK
      

  5.   

    3,加入.h,.c 文件,然后CoCreateInstance
      

  6.   

    4,5 查LoadTypeLib函数的Sample,可以解决OleView的大部分工作。
      

  7.   

    用oleview工具打开com的文件即可查看详细信息
      

  8.   

    补充:
    1.将DLL注册,根据文件名字到注册表搜索,或在组件服务,DCOM,属性拽可以CLSID等
    2.枚举所有接口?
      (1)可以通过OLE VIEW看
      (2)如果有.h可以看到,或导入.tlb都可以看到
    3.(1)创建进程内组件,本机进程外组件 CoCreateInstance(.. dwClsContext..)
           这里dwClsContext要做标志,可参见MSDN
      (2)如果创建远程组件,使用CoCreateInstanceEx
           唯一区别COSERVERINFO * pServerInfo 涉及到一些安全信息    获得接口的IID,可以使用__uuidof()
    4.仅仅枚举一个组件的接口,属性,事件,也很容易
      把BEGIN_COM_MAP,BEGIN_SINK_MAP......里面的数组打印出来就可以了
    5. 如果你写出来了OLEView,我不仅给1000分,还会花钱买,用来学习
      

  9.   

    到底有谁参数怎么倒出来啊???我没办法搞定参数还有 那个ITypeInfo2的指针怎么得到啊?我用ITypeInfo强制转换到ITypeInfo2好象没什么效果
      

  10.   

    LoadTypeLib / LoadTypeLibEx 函数可以得到ITypeInfo,再QueryInterface ITypeLib2
      

  11.   

    ITypeLib2 InterfaceThe ITypeLib2 interface inherits from the ITypeLib interface. This allows ITypeLib to cast to an ITypeLib2 in performance-sensitive cases, rather than perform extra QueryInterface() and Release() calls.