2016-07-27 28 views

Antwort

4

Die Registrierung sollte keine Programmierressource sein, Registrierungseinträge sind nur vorhanden, wenn die COM-Infrastruktur sie benötigt. Der Schlüssel CLSID zum Beispiel ist notwendig, um COM zu helfen, die ausführbare Datei zu finden, die einen Server implementiert, der Programmierer muss die CLSID-GUID liefern.

Er muss die IID auch wissen, übergibt es an QueryInterface(), um den Schnittstellenzeiger zu erhalten. Dort könnte ein Eintrag in HKLM \ Software \ Classes \ Interface sein, aber es ist nicht sehr häufig. Die COM-Infrastruktur benötigt es, wenn eine Schnittstelle von einem Apartment zu einem anderen gemarshallt werden muss. Der Registrierungsschlüssel enthält die CLSID des Proxys, der diesen Job erledigt. Ein kurzer Blick mit Regedit.exe in diesem Schlüssel sollte Sie davon überzeugen, dass es überhaupt nicht hilfreich sein wird, es gibt überhaupt keine Verbindung mit dem Server selbst. Nur wenn Sie viel Glück haben, finden Sie dort möglicherweise eine Typbibliothek LIBID.

Es gibt zwei grundlegende Möglichkeiten, wie der COM-Programmierer Ihnen CLSID- und IID-Werte zur Verfügung stellt. Der unfreundliche Weg ist eine .idl oder .h Datei, mehrere Windows-Komponenten (DirectX, Media Foundation, WASAPI, usw.) sind so. Gut genug, um die IIDs zurück zu sehen.

Der freundliche Weg ist eine Typenbibliothek, eine sprachunabhängige Beschreibung der implementierten CoClasses und Interfaces, die jeder Compiler lesen kann. Wird manchmal als separate .tlb- oder .olb-Datei bereitgestellt, aber normalerweise als Ressource in die ausführbare Datei eingebettet. Der beste Weg, um es zu sehen, ist mit dem Oleview.exe SDK-Dienstprogramm. Verwenden Sie Datei> Typelib anzeigen, und wählen Sie die TLB- oder DLL-Datei aus. Er dekompiliert die Typbibliothek zurück in IDL, die Sprache, mit der ein COM-Autor seine Komponente beschreibt. Sie werden keine Probleme haben, die IIDs zurück zu finden. Sie müssen nur den Namen der ausführbaren Datei wissen.

Achten Sie darauf, die Typbibliothek in Ihrem Compiler zu nutzen, vorausgesetzt, Sie haben einen gefunden. Sie können jetzt anstelle von Raw-GUIDs benutzerfreundliche Namen verwenden, Syntaxprüfungen für Ihren Code durchführen und selten dramatische Änderungen vornehmen, wenn sich die Version ändert und der Autor ordnungsgemäß neue IIDs verwendet. Seien Sie sicher, mit dem Autor zu sprechen, wenn Sie nicht einen finden können, ein kleiner Hinweis kann Ihnen eine enorme Menge an Ärger ersparen.

+0

Vielen Dank. Kurz gesagt, ich kann die IID in der Registrierung nicht nutzen. Übrigens habe ich eine TypeLib-GUID in 'Classes \ CLSID \ \ TypeLib' gefunden, aber diese wird von vielen Klassenobjekten geteilt. Ich denke, das ist der LIBID, auf den Sie sich beziehen. – modiX

+1

Wenn Sie die LIBID haben, dann sind Sie golden, sehen Sie in HKLM \ Software \ Classes \ Typelib und Sie finden den Pfad zur Typbibliotheksdatei. Dasjenige, das Sie in OleView.exe auswählen möchten. Sicher, eine Typbibliothek hat normalerweise mehrere Co-Klassen. –

+0

Danke, das war's. Ich könnte viele Schnittstellen mit der gleichen TypeLib (LIBID) sowie den TypeLib-Eintrag selbst finden. Das hat sehr geholfen. – modiX