2016-08-23 60 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)就是這樣。 –

相關問題