Wrappers COM
COM diffère du modèle objet .NET Framework sur plusieurs points importants :
Les clients des objets COM doivent gérer la durée de vie de ces objets ; le Common Language Runtime gère la durée de vie des objets dans son environnement.
Les clients des objets COM déterminent si un service est disponible en demandant une interface qui fournit ce service et en récupérant le cas échéant un pointeur d'interface en retour. Les clients des objets .NET peuvent obtenir une description de la fonctionnalité d'un objet par l'intermédiaire de la fonctionnalité de réflexion.
Les objets NET résident dans la mémoire managée par l'environnement d'exécution .NET Framework. Celui-ci peut déplacer des objets dans la mémoire en vue d'améliorer les performances et mettre à jour toutes les références aux objets qu'il déplace. Les clients non managés, ayant obtenu un pointeur désignant un objet, s'attendent à ce que cet objet reste au même emplacement. Ces clients ne disposent d'aucun mécanisme leur permettant d'utiliser un objet dont l'emplacement n'est pas fixe.
Pour triompher de ces différences, le runtime fournit des classes wrapper pour faire croire aux clients à la fois managés et non managés qu'ils appellent des objets dans leur environnement respectif. Chaque fois que votre client managé appelle une méthode sur un objet COM, le runtime crée un wrapper RCW (Runtime Callable Wrapper). Les wrappers RCW permettent, entre autres, de gommer les différences entre les mécanismes de référence managé et non managé. Le runtime crée également un wrapper CCW (COM Callable Wrapper) pour inverser le processus, permettant ainsi à un client COM d'appeler de façon transparente une méthode sur un objet .NET. Ainsi que le montre l'illustration suivante, la perspective du code appelant détermine la classe wrapper créée par le runtime.
Wrapper COM : vue d'ensemble
Dans la plupart des cas, les wrappers RCW ou CCW standard générés par le runtime assurent un marshaling adéquat pour les appels qui franchissent la limite séparant COM du .NET Framework. En utilisant des attributs personnalisés, vous pouvez facultativement définir la façon dont le runtime représente le code managé et non managé.
Voir aussi
Tâches
Comment : personnaliser les wrappers RCW (Runtime Callable Wrapper)
Concepts
Wrapper pouvant être appelé par le runtime
Wrapper pouvant être appelé par COM
Personnalisation de wrappers standard