Wrapper pouvant être appelé par COM

Lorsqu'un client COM appelle un objet .NET, le Common Language Runtime crée l'objet managé et un wrapper pouvant être appelé par COM (CCW, COM Callable Wrapper) pour cet objet. Ne pouvant pas référencer directement un objet .NET, les clients COM utilisent le wrapper CCW en tant que proxy pour le code managé.

Le runtime crée exactement un wrapper CCW pour chaque objet managé, indépendamment du nombre de clients COM demandant ses services. Comme le montre l'illustration suivante, plusieurs clients COM peuvent contenir une référence au wrapper CCW qui expose l'interface INew. Le wrapper CCW, à son tour, contient une référence unique à l'objet managé qui implémente l'interface et est récupéré par le garbage collector. Aussi bien les clients COM que .NET peuvent présenter simultanément des demandes portant sur le même objet managé.

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

Wrapper pouvant être appelé par COM

Les wrappers pouvant être appelés par COM sont invisibles aux autres classes s'exécutant dans l'environnement .NET Framework. Leur objectif principal est de marshaler les appels entre le code managé et le code non managé ; cependant, les wrappers CCW gèrent également l'identité et la durée de vie des objets managés qu'ils enveloppent.

Identité de l'objet

Le runtime alloue de la mémoire à l'objet .NET à partir du tas obtenu à l'issue d'une opération garbage collection ; le runtime peut ainsi déplacer l'objet dans la mémoire si nécessaire. En revanche, le runtime alloue de la mémoire au wrapper CCW à partir d'un tas non récupéré, ce qui permet aux clients COM de faire référence directement au wrapper.

Durée de vie de l'objet

Contrairement au client .NET qu'il enveloppe, le wrapper CCW fait l'objet d'un décompte de références selon le mode COM standard. Quand le décompte de références du wrapper CCW atteint zéro, le wrapper libère sa référence à l'objet managé. Un objet managé sans aucune référence restante est collecté lors du cycle garbage collection suivant.

Voir aussi

Référence

Wrapper pouvant être appelé par COM

Concepts

Wrappers COM
Simulation d'interfaces COM
Wrapper pouvant être appelé par le runtime
Exposition de composants .NET Framework à COM