1.除非该com组件提供枚举内部接口或者类似功能的的函数,否则编程无法获得其接口信息。
2.可以看提供com组件的作者提供的文档来获得这些信息。

解决方案 »

  1.   

    3.上面1说的不完全对:com接口是需要注册到注册表中的,所以可以通过搜索注册表获得该组件接口信息。
      

  2.   

    使用 #import "c:\winnt\system32\tlbinf32.dll" 导入TypeLib information库,该库提供了类来获取一个 active dll中的所有coclass,interface, function, paraments等信息。如果不足道该如何
    使用,可以先在VB中做实验。
    1 在Project的引用中增加对 TypeLib ,information 库的引用
    2 下面是一段示例代码:显示所有的coclass
        Dim TLInfo As TypeLibInfo
        Set TLInfo = TLI.TypeLibInfoFromFile( "c:\temp\Your.dll")
        With TLInfo.CoClasses
            For i = 1 To .Count
                 msgbox .Item(i).name
            Next
        End With
        '显示第一个CoClass的所有接口   
        With TLInfo.CoClasses.Item(1).interfaces
            For i = 1 To .Count
                 msgbox .Item(i).name
            Next
        End With    '显示第一个CoClass的第一个接口的的所有函数
        With TLInfo.CoClasses.Item(1).interfaces(1).members
            For i = 1 To .Count
                 msgbox .Item(i).name
            Next
        End With 
      

  3.   

    所有的自动化接口都继承自 IDispatch 接口, 而该接口提供了函数
      GetTypeInfoCount 得到类型信息的数量
      GetTypeInfo 得到第N 个类型信息可以这样说,只要是一个自动化对象,使用 上述的函数就可以得到该接口的函数,属性信息,并可以用IDispatch::Invoke来调用这些函数。比如下面的代码:dim a
    set a=createObject("testdll.testobj")
    a.func1 1,2上述的一段 vb script 代码,它的内部处理可以看成是这样的。
    首先创建一个testobj对象,然后用 GetTypeInfo 查询对象是否存在
    函数 "func1" ,然后在查询该函数的参数信息,最后将 1, 2  放到一个
    DISPPARAMS 中,调用函数 Invoke 执行实际的操作。可以这样说: 所有的自动化对象的函数的调用都可以通过查询,拼装参数,
    调用 Invoke 来完成的。