Agrégation (COM)
Remonter à Serveurs COM
Dans certains cas, un objet serveur peut utiliser un autre objet COM pour effectuer certaines de ces fonctions. Par exemple, un objet de gestion de stock peut utiliser un objet commande séparé pour gérer les commandes des clients. Si l'objet de gestion de stock veut présenter une interface de commande au client, il y a un problème. Même si le client ayant une interface stock peut appeler QueryInterface pour obtenir l'interface commande, quand l'objet commande a été créé, il ne connaît pas l'objet gestion de stock et ne peut lui renvoyer une interface stock en réponse à un appel de QueryInterface. Un client qui a l'interface commande ne peut revenir dans l'interface stock.
Pour éviter ce problème, certains objets COM gèrent l'agrégation. Quand l'objet gestion de stock crée une instance de l'objet commande, il lui transmet une copie de sa propre interface IUnknown L'objet commande peut ensuite utiliser cette interface IUnknown et gérer les appels de QueryInterface qui demandent une interface, comme l'interface stock, qu'il ne gère pas. Quand cela se produit, les deux objets pris ensemble s'appellent un agrégat. L'objet commande est appelé l'objet interne (ou objet contenu) de l'agrégat et l'objet stock est appelé l'objet externe.
Remarque : Pour pouvoir se comporter comme objet externe d'un agrégat, un objet COM doit créer l'objet interne en utilisant l'API WindowsCoCreateInstance ou CoCreateInstanceEx, en lui transmettant comme paramètre un IUnknown que l'objet interne peut utiliser pour les appels de QueryInterface.
Pour créer un objet qui puisse se comporter comme objet interne d'un agrégat, il doit descendre de System.TContainedObject. Quand l'objet est créé, l'interface IUnknown de l'objet externe est transmise au constructeur afin qu'elle puisse être utilisée par la méthode QueryInterface pour les appels que l'objet interne ne peut pas traiter.