Partager via


Wrappers COM

COM diffère du modèle objet runtime .NET de plusieurs façons importantes :

  • Les clients d’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 d’objets COM découvrent si un service est disponible en demandant une interface qui fournit ce service et en récupérant un pointeur d’interface, ou non. Les clients d’objets .NET peuvent obtenir une description des fonctionnalités d’un objet à l’aide de la réflexion.

  • Les objets NET résident dans la mémoire gérée par l’environnement d’exécution du runtime .NET. L’environnement d’exécution peut déplacer des objets en mémoire pour des raisons de performances et mettre à jour toutes les références aux objets qu’il déplace. Les clients non managés, ayant obtenu un pointeur vers un objet, s’appuient sur l’objet pour rester au même emplacement. Ces clients n’ont aucun mécanisme pour traiter un objet dont l’emplacement n’est pas fixe.

Pour surmonter ces différences, le runtime fournit des classes wrapper pour que les clients managés et non managés pensent 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 pouvant être appelé COM (CCW) pour inverser le processus, ce qui permet à un client COM d’appeler en toute transparence une méthode sur un objet .NET. Comme l’illustre l’illustration suivante, la perspective du code appelant détermine la classe wrapper créée par le runtime.

Vue d’ensemble du wrapper COM

Dans la plupart des cas, la norme RCW ou CCW générée par le runtime fournit un marshaling adéquat pour les appels qui franchissent la limite entre COM et le runtime .NET. À l’aide d’attributs personnalisés, vous pouvez éventuellement ajuster la façon dont le runtime représente le code managé et non managé.

Voir aussi