Erstellen Registration-Free COM-Objekte
Aktivierungskontexte ermöglichen die Verwendung von COM-Objekten, ohne dass sie registriert werden müssen. Dadurch kann Ihre Anwendung über mehrere Komponenten mit unterschiedlichen Funktionen verfügen, die auf ihrer Version und nicht auf ihren Registrierungsinformationen basieren. Mehrere Komponenten können dasselbe COM-Objekt mit derselben GUID verfügbar machen, verfügen jedoch über unterschiedliche Funktionen basierend auf der Version.
Wenn eine Anwendung eine GUID von CLSIDFromProgID anfordert, sucht COM zunächst im aktiven Aktivierungskontext nach der Zuordnung von progid zu CLSID. Wenn eine Anwendung CoCreateInstance zum Abrufen eines instance-Schnittstellenzeigers verwendet, sucht COM im aktiven Aktivierungskontext nach der DLL, die die CLSID hostet. Wenn der Aktivierungskontext nicht die erforderlichen Informationen enthält, sucht COM mit der üblichen Methode nach den Informationen in der Registrierung.
Beachten Sie, dass COM den Aktivierungskontext des erstellenden Threads an den Hostthread marshallt und aktiviert, bevor LoadLibrary oder DllGetClassObject im Hostthread aufgerufen wird, da Aktivierungskontexte pro Thread vorhanden sind. Diese Funktionalität ist bereits in Windows vorhanden. Clientcode ist nicht erforderlich, um dies zu implementieren.
COM-Klassen können von gehosteten Komponenten exportiert werden, ohne die Registrierung zu durchlaufen. Mehrere Komponenten können dieselbe ProgID für verschiedene COM-Objekte verfügbar machen, und Ihre Hostinganwendung sollte nur den richtigen Aktivierungskontext finden und dann CLSIDFromProgID und CoCreateInstance verwenden, um die Schnittstellenzeiger des gehosteten Objekts abzurufen.