I Inconnu - IUnknown
En programmation informatique , l' interface IUnknown est l' interface fondamentale du modèle d'objet composant (COM). La spécification COM exige que les objets COM doivent implémenter cette interface. En outre, toutes les autres interfaces COM doivent être dérivées de IUnknown. IUnknown expose deux fonctionnalités essentielles de tous les objets COM: la gestion de la durée de vie des objets via le comptage de références et l'accès à la fonctionnalité des objets via d'autres interfaces .
Une interface IUnknown (ou dérivée de IUnknown) consiste en un pointeur vers une table de méthodes virtuelles qui contient une liste de pointeurs vers les fonctions qui implémentent les fonctions déclarées dans l'interface, dans l'ordre dans lequel elles sont déclarées dans l'interface. La surcharge des appels d'appel en cours est donc identique aux appels de méthode virtuelle en C ++.
Méthodes
L'interface IUnknown expose trois méthodes : QueryInterface
, AddRef
, et Release
:
-
QueryInterface
permet à l'appelant de récupérer des références aux interfaces implémentées par le composant. Il est semblable àdynamic_cast<>
en C ++ ou moulages en Java et C # . Plus précisément, il est utilisé pour obtenir un pointeur vers une autre interface, étant donné un GUID qui identifie de manière unique cette interface (communément appelé un ID d'interface ou IID ). Si l'objet COM n'implémente pas cette interface, une erreur E_NOINTERFACE est renvoyée à la place. -
AddRef
est utilisé pour incrémenter le nombre de références lorsqu'un nouveau client acquiert l'objet. Il renvoie le nouveau nombre de références. -
Release
est utilisé pour décrémenter le nombre de références lorsque les clients ont fini d'utiliser l'objet. Il renvoie le nouveau nombre de références. L'objet se supprimera pendant la publication lorsque le nombre de références atteint zéro, ce qui signifie que l'appelant ne doit jamais utiliser une interface après avoir appelé Release.
interface IUnknown {
virtual HRESULT QueryInterface (REFIID riid, void **ppvObject) = 0;
virtual ULONG AddRef () = 0;
virtual ULONG Release () = 0;
};
L' ID d'interface IUnknown est défini comme un GUID avec la valeur {00000000-0000-0000-C000-000000000046}.
Les interfaces d'un composant COM doivent présenter les propriétés réflexive, symétrique et transitive . La propriété réflexive fait référence à la possibilité pour l' QueryInterface
appel sur une interface donnée avec l'ID de l'interface de renvoyer la même instance de l'interface. La propriété symétrique exige que lorsque l'interface B est récupérée à partir de l'interface A via QueryInterface
, l'interface A soit également récupérable à partir de l'interface B. La propriété transitive exige que si l'interface B peut être obtenue à partir de l'interface A et que l'interface C peut être obtenue à partir de l'interface B, alors l'interface C doit être récupérable à partir de l'interface A.
Divers
- Les composants conçus sous la norme de composant visuel ActiveX doivent, au minimum, implémenter l'interface IUnknown.
- IUnknown sert de base pour Mac OS X de Core Foundation cadre CFPlugin.
- Dans le modèle de composant XPCOM de Mozilla , cette interface est également connue sous le nom de nsISupports.
Voir également
- IOleObject - Il s'agit de l'interface de base pour les objets OLE ( Object Linking and Embedding ).
- IDispatch - Cette interface fournit une distribution de méthode dynamique basée sur le nom pour les objets OLE Automation COM
- IObjectWithSite - Cette interface COM permet à une paire d'objets parent / enfant de se connecter entre eux pour implémenter un objet d'assistance de navigateur (BHO)
- IInspectable - Le Windows Runtime dérivé de COM (WinRT) utilise cette interface dérivée de IUnknown comme interface de base