2010-09-06 5 views

Répondre

4

Vous implémentez cela dans COM avec l'agrégation.

Fondamentalement, vous créez un objet qui implémente certaines interfaces et encapsule l'accès à un objet interne.

L'objet interne que vous créez en appelant CoCreateInstance et en passant vos propres objets IUnknown dans le paramètre pUnkOuter.

Si l'objet interne le supporte (correctement), il différera tous les appels d'interface vers l'objet extérieur, donnant ainsi à votre objet la première chance de fournir des interfaces.


Notez que tragiquement quelques objets COM soutiennent réellement l'agrégation - parce que la mise en œuvre de soutien est (a) difficile à obtenir le droit, et (b) difficile à justifier dans un modèle de développement où le code est écrit pour répondre à un besoin immédiat (qui couvre la plupart des méthodologies actuelles de développement à la mode) - Je m'attends malheureusement à ce que la plupart des objets com répondent (dans le meilleur des cas) à E_NOTSUPPORTED, ou (dans le pire des cas) à une tentative testée. récursivité dès qu'il est utilisé d'une manière non triviale.

Si vous trouvez un objet com avec une prise en charge de l'agrégation «out-the-box», vous devriez avoir utilisé cette chance sur un ticket de loterie. : P

+2

À noter que, techniquement parlant, tout ce qui peut être fait avec l'agrégation peut également être fait avec une simple délégation ancienne (écrire des enveloppes manuellement, ou générer automatiquement avec un outil). L'agrégation est juste plus efficace. –

1

Les interfaces peuvent hériter d'autres interfaces, mais aucun composant ne peut remplacer un autre composant, sauf par composition, c'est-à-dire transmettre d'autres méthodes au composant composé et implémenter directement les méthodes "overridden".

Questions connexes