Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
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
- Génération de la source ComWrappers
- Interopérabilité COM avancée dans .NET Framework
- Wrapper pouvant être appelé par le runtime
- Wrapper CCW (COM Callable Wrapper)
- Personnalisation des wrappers standard dans .NET Framework
- Guide pratique pour personnaliser des wrappers pouvant être appelé au runtime dans .NET Framework