2016-08-23 37 views
0

如果我知道OLE自动化服务器的名称(可在HKEY_CLASSES_ROOT下找到),是否有任何方法可以查询所有可用对象及其方法和属性,即使服务器不支持提前绑定,因此无法在对象浏览器中找到?列出OLE自动化服务器的所有对象

如果是的话,你可以请提供几行代码(更喜欢VB,但真的没关系)如何做到这一点?

回答

1

如果服务器有关联的Type Library (.TLB file),您可以。否则,没有办法。

您可以找到TLB ID(它也是一个GUID)引用如果它存在的注册表项类型库的默认值,在这里:

HKCR\CLSID\<your CLSID>\TypeLib 

然后,类型库ID指向

HKCR\TypeLib\<tlb id> 

其中您可以在下面的键中找到TLB路径(取决于体系结构,它可能与x86或x64不同)。

例如,这里是通向标准的ADO的2.6(ActiveX数据对象)类型库:

enter image description here

一旦你有一个TLB,您可以使用COM的API来浏览它。从C++或本地客户端可以,但对于VB,VBScript等自动化客户端来说,这个DLL“tlbinf32.dll”允许你这样做。这里是一个链接,谈论它:Accessing Type Libraries from VB

+0

感谢澄清这一点。我是否正确地得出结论:如果存在自动化服务器,那么总是存在一个TLB,只是开发人员可能决定不向其发送(给所有人)? – vic

+0

并非总是如此,COM的最低级别只是服务器和客户端共享的VTable二进制协议,但大多数情况下,因为工具(例如MIDL)就是这样。 –

相关问题