Utilisation de la substitution fournie par le système
Pour utiliser la substitution fournie par le système pour votre serveur DLL, inscrivez la DLL en spécifiant une chaîne vide ou NULL pour la valeur DllSurrogate dans le registre. Lorsqu’une demande d’activation d’un serveur DLL ainsi désigné parvient à COM, celui-ci lance le processus de substitution par défaut et la DLL demandée (en spécifiant le CLSID sur la ligne de commande de lancement en interne) en même temps afin d’éviter un appel séparé. (Pour plus d’informations sur l’exécution de plusieurs serveurs DLL dans un processus de substitution, consultez Partage de substitution.)
L’implémentation par défaut du processus de substitution est un serveur pseudo-COM de style de modèle de thread mixte. Lorsque plusieurs serveurs DLL sont chargés dans un processus de substitution unique, ce processus garantit que chaque serveur DLL est instancié à l’aide du modèle de thread spécifié dans le registre pour ce serveur. Tous les serveurs d’exécution libre de threads chargés vivent ensemble dans le multithread cloisonné, tandis que chaque serveur à thread cloisonné réside dans un thread unique cloisonné. Si un serveur DLL prend en charge les deux modèles de thread, COM choisit le multithreading.
Ce processus de substitution est écrit afin que COM gère à la fois le déchargement des serveurs DLL et la fin du processus de substitution. La durée de vie du processus est principalement informée par le nombre d’objets marshalés dans la substitution, qui agit comme une mesure heuristique des dépendances externes sur le processus. Même si l’intention est de représenter des dépendances externes, ce modèle de durée de vie ne fait pas la distinction entre le marshaling in-proc et out-of-proc. Veillez à éviter d’épingler involontairement le substitut par le biais du marshaling intercloisonnements ou par le biais de mécanismes basés sur le marshaling in-proc tels que la table d’interface globale ou IAgileReference .
La substitution fournie par le système fonctionnera très bien pour la plupart des développeurs, et est très simple d’utilisation. Toutefois, ces développeurs ayant des considérations particulières peuvent décider qu’une substitution personnalisée est nécessaire. Pour plus d’informations, consultez Écriture d’une substitution personnalisée.