3 Stimmen

Registrierung der Implementierung einer COM-Schnittstelle

Ich bin neu in der COM-Programmierung. Ich habe ein COM-Objekt (und zugehörige IClassFactory) alle bereit zu gehen, aber ich kann nicht ganz herausfinden, wie man über die Registrierung der resultierenden DLL für die Verwendung durch andere Programme gehen. Die Anzahl der GUIDs, die ich brauche, um zu schleudern ist auch unklar für mich.

Das COM-Objekt, das ich zu registrieren versuche, implementiert die Schnittstelle IAudioSessionEvents.

Ich bin auf die Funktionen DllRegisterServer und DllUnregisterServer gestoßen, aber ich habe keine eindeutigen Demonstrationen ihrer Verwendung gefunden. Mit welchen Schlüsseln arbeiten sie, wie werden sie aufgerufen, durch was und wann, usw.?

Danke,
-Kevin Montrose

4voto

sharptooth Punkte 162790

Sie benötigen eine GUID für jede Klasse, die Sie COM zur Verfügung stellen, und eine GUID für jede neue Schnittstelle, die Sie einführen und über COM verfügbar machen wollen.

DllRegisterServer/DllUnregister-Server werden aufgerufen, wenn Sie das Dienstprogramm regsvr32 (im Lieferumfang von Windows enthalten) zur Registrierung Ihrer COM-exponierten Klassen verwenden. Es fügt dem HKCR/CLSID-Zweig für jede Klasse, die Sie COM zur Verfügung stellen, Schlüssel hinzu oder entfernt sie. Diese Schlüssel werden von CoCreateInstance() verwendet, um herauszufinden, welche DLL für die Erstellung einer Instanz einer Klasse mit einer bestimmten GUID geladen werden muss.

Wenn Sie ATL oder etwas Ähnliches verwenden, müssen Sie DllRegisterServer/DllUnRegisterServer in der Regel nicht vollständig implementieren, sondern verwenden die mit der Bibliothek bereitgestellte Implementierung.

4voto

Paul Keister Punkte 12511

Ich bin nicht sicher aus diesem Beitrag, ob Sie implementieren oder die DLL, die IAudioSessionEvents unterstützt konsumieren. Wenn Sie diese DLL verwenden, dann können Sie die Komponente mit dem Kommentarzeilendienstprogramm regsvr32 registrieren. Zum Registrieren verwenden:

regsvr32

Zum Abmelden:

regsvr32 /u

regsvr32 sollte sich in Ihrem Pfad befinden, so dass dieser Befehl von jedem Verzeichnis aus funktioniert.

Wenn Sie die betreffende DLL implementieren, müssen Sie eine Implementierung der Funktionen DllRegisterServer und DllUnRegisterServer bereitstellen. Diese Funktionen müssen Registry-Einträge für Ihre Komponente einrichten und bereinigen. Der Zweck der Registrierungseinträge besteht darin, eine ProgID bereitzustellen, diese einer CLSID zuzuordnen und eine Schnittstellen-ID für die von der Komponente unterstützten Schnittstellen bereitzustellen. Zum Beispiel die Schnittstellen-ID für IAudioSessionEvent. Wenn Sie die DLL implementieren, müssen Sie Code zur Durchführung all dieser Aufgaben bereitstellen.

Hinweis: Diese Funktionen werden von regsvr32 aufgerufen, um die Komponente zu registrieren.

Wenn es sehr ungewöhnlich ist, diesen Code tatsächlich zu schreiben, sollten Sie im Allgemeinen ein Framework wie ATL verwenden, das Ihnen die Arbeit abnimmt. Es ist eine gute Übung, diesen Code mindestens einmal zu schreiben, wenn Sie COM wirklich von Grund auf kennenlernen wollen.

0voto

1800 INFORMATION Punkte 125009

Der einfachste Weg, die Selbstregistrierung zu implementieren, besteht oft darin, die ATL-Serverklassen zu verwenden, eine globale Variable zu haben, die von CComModule (oder einer anderen ähnlichen Klasse) abgeleitet ist, und eine COM_MAP in Ihrem Modul zu definieren. Sie bitten dann das Com-Modul, die Registrierung auf der Grundlage der .rgs-Dateien, die Sie Ihrem Projekt hinzugefügt haben, zu übernehmen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X