Partager via


Création d’objets COM Registration-Free

Les contextes d’activation permettent d’utiliser des objets COM sans nécessiter leur inscription. Cela permet à votre application d’avoir plusieurs composants avec des fonctionnalités différentes en fonction de leur version plutôt que de leurs informations de Registre. Plusieurs composants peuvent exposer le même objet COM avec le même GUID, mais ont des fonctionnalités différentes en fonction de la version.

Lorsqu’une application demande un GUID de CLSIDFromProgID, COM recherche d’abord le mappage de progid à CLSID dans le contexte d’activation actif. Lorsqu’une application utilise CoCreateInstance pour obtenir un pointeur d’interface instance, COM recherche dans le contexte d’activation actif la DLL qui hébergera le CLSID. Si le contexte d’activation ne contient pas les informations requises, COM recherche les informations dans le Registre à l’aide de la méthode habituelle.

Notez que, étant donné que les contextes d’activation sont par thread, COM marshale le contexte d’activation du thread de création sur le thread hôte et l’active avant d’appeler LoadLibrary ou DllGetClassObject sur le thread hôte. Cette fonctionnalité est déjà présente dans Windows. Le code client n’est pas nécessaire pour l’implémenter.

Les classes COM peuvent être exportées par des composants hébergés sans passer par le Registre. Plusieurs composants peuvent exposer le même ProgID pour différents objets COM, et votre application d’hébergement doit uniquement trouver le contexte d’activation approprié, puis utiliser CLSIDFromProgID et CoCreateInstance pour obtenir les pointeurs d’interface de l’objet hébergé.