Um ein COM Objekt zu initialiesieren, benötige ich die CLSID (für die DLL, die geladen werden muss -> InprocServer32) und die IID (Interface ID).
Die IDs der Interfaces finde ich unter dem Registryschlüssel HKEY_CLASSES_ROOT\Interface und die CLSIDs stehen unter HKEY_CLASSES_ROOT\CLSID.
Gibt es eine Möglichkeit einem Interface aus der Registry die dazugehörge CLSID zuzuordnen?
COM Objekte in der Registry
-
-
-
Müsstest den Pascal mal fragen, der kennt sich mit diesen Sachen gut aus.
-
Hi Leute!
ZitatMüsstest den Pascal mal fragen, der kennt sich mit diesen Sachen gut aus.
Ich hätte mich schon gemeldet, wenn ich die Antwort wüßte
Aber ich habe seinerzeit das Pferd von hinten aufgezäumt und alle CLSIDs / IIDs aus C++-Headern oder diversen Beispielen anderer Programmiersprachen rausgesucht.
Mein einziger Tipp an AHT wären die diversen Analysetools für COM/OLE, die in der Hilfe zum OCX-Package (auf XProfan.com unter 'Includes' danach suchen) erwähnt werden.
SeeYou
Pascal -
Im Prinzip mache ich das genau so.
Die richtige Adresse in der Liste für die CallBacks zu finden war etwas "Probiererei"
ob man zweimal oder einmal hopsen muss, um die richtige Adresse für den Call zu bekommen, sieht man ja am Code:Codehr := [COLOR=#2b91af]Ifd[/COLOR].[COLOR=#2b91af]GetResult[/COLOR]([COLOR=#2b91af]Isi[/COLOR]); [COLOR=#00008b]if[/COLOR] [COLOR=#2b91af]Succeeded[/COLOR](hr) [COLOR=#00008b]then[/COLOR] [COLOR=#00008b]begin[/COLOR] [COLOR=#2b91af]Assert[/COLOR]([COLOR=#2b91af]Isi[/COLOR] <> [COLOR=#00008b]nil[/COLOR]); [COLOR=#808080]// TODO: just for testing, needs to be implemented properly[/COLOR] [B][U][COLOR=#00008b]if[/COLOR][/U][/B][B][U] [COLOR=#2b91af]Succeeded[/COLOR]([COLOR=#2b91af]Isi[/COLOR].[COLOR=#2b91af]GetDisplayName[/COLOR](SIGDN_NORMALDISPLAY, pWc[/U][/B][B][U])) [/U][/B] [COLOR=#00008b]and[/COLOR] (pWc <> [COLOR=#00008b]nil[/COLOR]) [COLOR=#00008b]then[/COLOR] [COLOR=#00008b]begin[/COLOR] s := pWc; [COLOR=#2b91af]FileName[/COLOR] := s; [COLOR=#00008b]end[/COLOR]; [COLOR=#00008b]end[/COLOR];
wird zuCodeCALL(LONG(COMMAND&,80),pfd&,addr(Result&)) 'Result Callbackadresse holen Command& = Long(Result&,0) [B][U]CALL(LONG(COMMAND&,20),Result&,$80058000,addr(Str&)) 'Displayname holen[/U][/B]
(.lfd / .lsi)
Ich dachte mir, wenn es einen Zusammenhang zwischen der CLSID und dem Interface über die Registry gäbe, könnte man sich auch problemlos um undokumentierte Objekte kümmern - kann den aber auch zur Zeit nicht erkennen.
Ist ja im Prinzip nur eine einfache Liste für CallBacks...
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!