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:

  • QueryInterfacepermet à 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.
  • AddRefest 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.
  • Releaseest 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' QueryInterfaceappel 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

Les références

Liens externes