2016-08-23 4 views
0

Wenn ich den Namen eines OLE-Automatisierungsservers kenne (wie unter HKEY_CLASSES_ROOT), gibt es eine Möglichkeit, alle verfügbaren Objekte, ihre Methoden und Eigenschaften abzufragen, auch wenn der Server nicht früh genug unterstützt Bindung und somit nicht im Objektbrowser gefunden?Alle Objekte eines OLE-Automatisierungsservers auflisten

Wenn ja, könnten Sie bitte ein paar Zeilen Code (bevorzugen VB, aber spielt wirklich keine Rolle) wie dies zu tun?

Antwort

1

Sie können, wenn der Server eine Type Library (.TLB file) zugeordnet hat. Sonst gibt es keinen Weg.

Sie können die TLB-ID finden (es ist auch ein guid) Referenz, wenn es als Standardwert des Registrierungsschlüssels TypeLib vorhanden ist, hier:

HKCR\CLSID\<your CLSID>\TypeLib 

Und dann die TypeLib-ID zeigt auf

HKCR\TypeLib\<tlb id> 

In dem Sie den TLB-Pfad in den Tasten darunter finden können (abhängig von der Architektur, kann es auf x86 oder x64 Unterschied sein).

Zum Beispiel, hier ist der Pfad zum 2.6 (ActiveX Data Objects) Standard ADO Bibliothek Typ:

enter image description here

Sobald Sie einen TLB haben, können Sie COM API verwenden, um es zu sehen. Das ist in C++ oder nativen Clients in Ordnung, aber für Automatisierungsclients wie VB, VBScript usw. gab es diese DLL "tlbinf32.dll", mit der Sie das tun konnten. Hier ist ein Link, der darüber spricht: Accessing Type Libraries from VB

+0

Vielen Dank für die Klärung. Folgere ich richtig, dass es, wenn ein Automatisierungsserver existiert, immer einen TLB gibt, nur dass der Entwickler entschieden hat, ihn nicht an alle zu versenden? – vic

+0

Nicht immer, weil es nicht unbedingt notwendig ist, ist COM auf der niedrigsten Ebene nur ein VTable-Binärkontrakt, der vom Server und vom Client gemeinsam genutzt wird, aber meistens, weil die Werkzeuge (zB MIDL) so laufen. –