事实证明 tlbinf32.dll 开箱即用,但它是隐藏的。从帮助文件:
ITypeLib As IUnknown
TypeLibInfoFromITypeLib(ByVal ptlib As IUnknown) As TypeLibInfo
每个 TypeLibInfo 内部都是对 ITypeLib 实例的引用。事实上,TypeLibInfo 对象可以看作是 ITypeLib 接口上的一个包装器,它比 ITypeLib 本身更容易编程。要查看两个 TypeLibInfo 对象是否实际引用同一个内部对象,请使用 VB 的 Is 运算符和两个对象的 ITypeLib 属性。对于实际上对应于相同基础类型的 TypeLibInfo 对象,Is 运算符通常会返回 False,但对于内部 ITypeLib 指针则不会。ITypeLib 属性是可设置的,因此您可以将 TypeLibInfo 对象放在现有 ITypeLib 之上。
如果您有 ITypeLib 引用并想要使用 TLI 对象,则可以调用 TLI.TypeLibInfoFromITypeLib 来生成功能齐全的 TypeLibInfo 对象。
ITypeLib 属性和 TypeLibInfoFromITypeLib 方法被视为高级功能并被标记为隐藏。
强调我自己
... ITypeInfo 指针的类似故事
那么如何使用呢?非常简单。首先是从指针中获取 IUnknown 的方法。例如:
Public Function ObjectFromObjPtr(ByVal Address As LongPtr) As IUnknown
Dim result As IUnknown
MemLongPtr(VarPtr(result)) = Address
Set ObjectFromObjPtr = result
MemLongPtr(VarPtr(result)) = 0
End Function
Private Property Let MemLongPtr(ByVal dest as LongPtr, ByVal value As LongPtr)
CopyMemory ByVal dest, value, LenB(value)
End Property
随之而来的电话
Dim ITypeLibPtr As LongPtr
ITypeLibPtr = ... 'get the raw pointer
Dim ITypeLibObj As IUnknown
Set ITypeLibObj = ObjectFromObjPtr(ITypeLibPtr)
Dim NiceTypeLib As tli.TypeLibInfo
Set NiceTypeLib = tli.TypeLibInfoFrom(ITypeLibITypeLibObj)
或类似的话