Registrieren eines ausgeführten EXE-Servers
Wenn ein ausführbarer Server (EXE) gestartet wird, sollte er CoRegisterClassObjectaufrufen, der die CLSID für den Server in der so genannten Klassentabelle registriert (eine andere Tabelle als die ausgeführte Objekttabelle). Wenn ein Server in der Klassentabelle registriert ist, kann der Dienststeuerungs-Manager (Service Control Manager, SCM) feststellen, dass es nicht erforderlich ist, die Klasse erneut zu starten, da der Server bereits ausgeführt wird. Nur wenn der Server nicht in der Klassentabelle aufgeführt ist, überprüft der SCM die Registrierung auf die entsprechenden Werte und startet den Server, der der angegebenen CLSID zugeordnet ist.
Sie übergeben CoRegisterClassObject die CLSID für die Klasse und einen Zeiger auf ihre IUnknown-Schnittstelle. Clients, die anschließend CoGetClassObject mit dieser CLSID aufrufen, rufen einen Zeiger auf ihre angeforderte Schnittstelle ab, solange die Sicherheit dies nicht unterbietet. (Eine Beschreibung mehrerer Funktionen zum Erstellen und Aktivieren von Instanzen finden Sie unter Hilfsfunktionen für die Instanzerstellung.)
Der Server für ein Klassenobjekt sollte CoRevokeClassObject aufrufen, um das Klassenobjekt zu widerrufen (seine Registrierung zu entfernen), wenn folgendes zutrifft:
- Es sind keine Instanzen der Objektdefinition vorhanden.
- Es gibt keine Sperren für das Klassenobjekt.
- Die Anwendung, die Dienste für das Klassenobjekt bereitstellt, wird nicht vom Benutzer gesteuert (für den Benutzer auf der Anzeige nicht sichtbar).