Partager via


Wrapper pouvant être appelé par le runtime

Le Common Language Runtime expose les objets COM à l'aide d'un proxy dénommé wrapper pouvant être appelé par le runtime (RCW, Runtime Callable Wrapper). Bien que le wrapper RCW apparaisse en tant qu'objet ordinaire aux clients .NET, sa fonction principale est de marshaler les appels entre un client .NET et un objet COM.

Le runtime crée exactement un wrapper RCW pour chaque objet COM, indépendamment du nombre de références s'appliquant à cet objet. Le runtime gère un seul wrapper RCW par processus par objet. Si vous créez un wrapper RCW dans un domaine d'application ou appartement, puis passez une référence à un autre domaine d'application ou appartement, un proxy du premier objet sera utilisé. Comme le montre l'illustration suivante, les clients managés (quel que soit leur nombre) peuvent contenir une référence aux objets COM qui exposent les interfaces INew et INewer.

Accès aux objets COM par l'intermédiaire du wrapper pouvant être appelé par le runtime

RCW

Utilisant les métadonnées dérivées d'une bibliothèque de types, le runtime crée à la fois l'objet COM appelé et un wrapper pour cet objet. Chaque wrapper RCW gère un cache de pointeurs d'interface sur l'objet COM qu'il encapsule et libère sa référence à l'objet COM lorsque la présence du wrapper RCW n'est plus indispensable. Le runtime effectue une opération garbage collection sur le wrapper RCW.

Entre autres activités, le wrapper RCW marshale les données entre le code managé et le code non managé pour le compte de l'objet encapsulé. Le wrapper RCW assure, plus précisément, le marshaling pour les arguments des méthodes et les valeurs de retour des méthodes chaque fois que le client et le serveur ont des représentations différentes des données qu'ils s'échangent.

Le wrapper standard applique les règles de marshaling internes. Par exemple, quand un client .NET passe un type String en tant qu'élément d'un argument à un objet non managé, le wrapper convertit la chaîne en un type BSTR. Si l'objet COM retourne un BSTR à son appelant managé, l'appelant reçoit une chaîne (String). Aussi bien le client que le serveur envoient et reçoivent des données qui leur sont familières. D'autres types ne requièrent pas de conversion. Par exemple, un wrapper standard passera toujours un entier de 4 octets entre un code managé et un code non managé sans convertir le type.

Voir aussi

Concepts

Wrappers COM
Marshaling d'interfaces sélectionnées
Wrapper pouvant être appelé par COM
Importation d'une bibliothèque de types sous la forme d'un assembly

Autres ressources

Résumé de la conversion d'une bibliothèque de types en assembly