Accès aux interfaces entre les appartements

COM fournit un moyen pour tout appartement dans un processus d’accéder à une interface implémentée sur un objet dans n’importe quel autre appartement dans le processus. Cela s’effectue via l’interface IGlobalInterfaceTable . Cette interface comporte trois méthodes, qui vous permettent d’effectuer les opérations suivantes :

  • Inscrire une interface en tant qu’interface globale (à l’échelle du processus).
  • Obtenez un pointeur vers cette interface à partir de n’importe quel autre appartement via un cookie.
  • Révoquez l’inscription globale d’une interface.

L’interface IGlobalInterfaceTable est un moyen efficace pour un processus de stocker un pointeur d’interface dans un emplacement mémoire accessible à partir de plusieurs appartements au sein du processus, tels que des variables à l’échelle du processus et des objets agiles (objets à thread libre et marshalés) contenant des pointeurs d’interface vers d’autres objets.

Un objet agile ignore l’infrastructure COM sous-jacente dans laquelle il s’exécute ; en d’autres termes, sur quel appartement, contexte et thread il s’exécute. L’objet peut s’accrocher à des interfaces spécifiques à un appartement ou à un contexte. Pour cette raison, l’appel de ces interfaces à partir de l’endroit où le composant agile s’exécute peut ne pas toujours fonctionner correctement. La table d’interface globale évite ce problème en garantissant qu’un proxy (ou pointeur direct) valide vers l’objet est utilisé, en fonction de l’endroit où l’objet agile s’exécute.

Notes

La table d’interface globale n’étant pas portable au-delà des limites du processus ou de l’ordinateur, elle ne peut pas être utilisée à la place du mécanisme normal de passage de paramètres.

 

Pour plus d’informations sur la création et l’utilisation d’une table d’interface globale, consultez les rubriques suivantes :

Choix du modèle threading

Appartements multithreads

Problèmes de thread de serveur in-process

Processus, threads et appartements

Communication monothread et multithread

Appartements à thread unique