Seite 1 von 1

COM-Objekt-Interfaces herausfinden ?

Verfasst: 02.06.2006 12:27
von Froggerprogger
Hi!
Ich habe da mal eine Frage zur COM-Objekt-Programmierung:

Ich habe folgende Funktion programmiert:

Code: Alles auswählen

*inst = GetInstanceFromProgId("MyProg.Component")
welche intern die ProgId über die Registry in die CLSID umwandelt und dann über CoCreateInstance_() eine Instanz dazu erzeugt.

Eigentlich bräuchte man ja bereits hierfür ein in PB definiertes Interface, welches sämtliche Methodennamen des COM-Objekts auflisted (Ich nutze hier IUnknown). Für den Methodenaufruf ist später lediglich deren Reihenfolge von belang, da im ASM-output die Aufrufe folgendermaßen ablaufen:

1. Pushe Parameter auf Stack
2. Lade *inst in eax
3. CALL "eax + 4 * 'MethodenId in Liste'"

Mein Ziel ist es, nun eine Methode

Code: Alles auswählen

InvokeMethod(*inst, "MethodenName" [, Param1 [, Param2 [,...]]])
zu basteln, welche einfach zur Laufzeit versucht, die Methode "MethodenName" aufzurufen, ohne dass das Interface hierfür definiert sein muss. D.h. es muss herausfinden, ob und wenn ja an welcher Stelle die Methode "MethodenName" im Interface steht. Ich hatte schon versucht, das über manuelles Auslesen der DLL zu machen, aber dort erscheinen die Methoden ebenfalls nur noch anhand ihrer ID, nicht ihres Namens.

Gibt es hierfür eine API-Funktion oder lässt sich das irgendwie über QueryInterface oder so erreichen ?

In Matlab funktioniert das übrigens, also muss es irgendwie machbar sein. Da geht das so:

Code: Alles auswählen

h = actxserver('progid')
h.methodenName(Param1, Param2, ...)
ohne weiteres Hintergrundwissen über die Interfaces, etc.

Verfasst: 02.06.2006 13:15
von Kiffi
Hai FroggerProgger,

von MS gibt's eine ActiveX-Komponente namens TlbInf32.DLL. Hiermit kann
man AFAIK eine Menge an Infos über Types, Methoden, Eigenschaften, etc.
ermitteln.

Ein MS-Doku zur TlbInf32.DLL gibt's hier:

http://download.microsoft.com/download/ ... bInfHT.EXE

Grüße ... Kiffi

Verfasst: 02.06.2006 14:15
von Froggerprogger
Danke, dass sieht genau nach dem aus, was ich suche!
Allerdings finde ich die in der EXE-Datei enthaltene HTML-Hilfe nirgendwo im Netz.

Das Ausführen der TlbInfHT.EXE scheitert daran, dass die nicht auf WinXP 64 läuft. Und auf meinem alten Win XP verlangt er ein installiertes Visual Basic 6 (oder wahrscheinlich davon nur eine Runtime-Library) bei Ausführung.

Hast du vielleicht eine entpackte Version davon und kannst die gezippt online stellen ? Oder an meine EMail (siehe PN) schicken ?

Verfasst: 02.06.2006 14:36
von Kiffi
> Oder an meine EMail (siehe PN) schicken ?

Mail ist unterwegs :-)

Grüße ... Kiffi

Verfasst: 02.06.2006 14:46
von Froggerprogger
Ist angekommen, danke!

@RestDerWelt
In der exe befindet sich eine .chm-Datei. Ich habe die nun einfach mal online verfügbar gemacht unter:

http://www.2mal2mal.de/public/TlbInf32.chm