Articulo de referencia

Yo Desconocido

En programación informática , la interfaz IUnknown es la interfaz fundamental en el Modelo de objetos componentes (COM). La especificación COM [1] exige que los objetos COM debe...

En programación informática , la interfaz IUnknown es la interfaz fundamental en el Modelo de objetos componentes (COM). La especificación COM [1] exige que los objetos COM deben implementar esta interfaz. Además, todas las demás interfaces COM deben derivarse de IUnknown. IUnknown expone dos características esenciales de todos los objetos COM: la gestión de la vida útil de los objetos a través del recuento de referencias y el acceso a la funcionalidad de los objetos a través de otras interfaces .

Una interfaz IUnknown (o derivada de IUnknown) consiste en un puntero a una tabla de métodos virtuales que contiene una lista de punteros a las funciones que implementan las funciones declaradas en la interfaz, en el orden en que se declaran en la interfaz. Por lo tanto, la sobrecarga de llamadas de invocación en proceso es idéntica a las llamadas a métodos virtuales en C++. [2]

Métodos

La interfaz IUnknown expone tres métodos : QueryInterface, AddRef, y Release: [3]

  • QueryInterfacepermite al llamador recuperar referencias a las interfaces que implementa el componente. Es similar a dynamic_cast<>C ++ o a las conversiones en Java y C# . Específicamente, se utiliza para obtener un puntero a otra interfaz, dado un GUID que identifica de manera única esa interfaz (comúnmente conocido como ID de interfaz o IID ). Si el objeto COM no implementa esa interfaz, se devuelve un error E_NOINTERFACE en su lugar.
  • AddRefse utiliza para incrementar el recuento de referencias cuando un nuevo cliente adquiere el objeto. Devuelve el nuevo recuento de referencias.
  • Releasese utiliza para disminuir el recuento de referencias cuando los clientes han terminado de usar el objeto. Devuelve el nuevo recuento de referencias. El objeto se eliminará a sí mismo durante la liberación cuando el recuento de referencias llegue a cero, lo que significa que el llamador nunca debe usar una interfaz después de llamar a Release.
interfaz IUnknown { virtual HRESULT QueryInterface ( REFIID riid , void ** ppvObject ) = 0 ; virtual ULONG AddRef () = 0 ; virtual ULONG Release () = 0 ; };  
          
         
         

El ID de interfaz IUnknown se define como un GUID con el valor {00000000-0000-0000-C000-0000000000046}.

Las interfaces de un componente COM deben exhibir las propiedades reflexiva, simétrica y transitivaQueryInterface . La propiedad reflexiva se refiere a la capacidad de la llamada a una interfaz dada con el ID de la interfaz para devolver la misma instancia de la interfaz. La propiedad simétrica requiere que cuando la interfaz B se recupere de la interfaz A a través de QueryInterface, la interfaz A también se pueda recuperar de la interfaz B. La propiedad transitiva requiere que si la interfaz B se puede obtener de la interfaz A y la interfaz C se puede obtener de la interfaz B, entonces la interfaz C se debe poder recuperar de la interfaz A.

Misceláneas

  • Los componentes diseñados bajo el estándar de componentes visuales ActiveX deben, como mínimo, implementar la interfaz IUnknown. [4]
  • IUnknown sirve como base para el marco CFPlugIn Core Foundation de Mac OS X. [5]
  • En el modelo de componentes XPCOM de Mozilla , esta interfaz también se conoce como nsISupports.

Véase también

Referencias

  1. ^ La especificación del modelo de objetos componentes, archivada desde el original el 15 de febrero de 2004
  2. ^ "El modelo de objetos componentes". microsoft.com . Microsoft. 30 de mayo de 2018 . Consultado el 12 de febrero de 2019 .
  3. ^ Definición desconocida en microsoft.com Archivado el 11 de julio de 2013 en Wayback Machine ; consultado el 18 de enero de 2008
  4. ^ Controles ActiveX en microsoft.com; consultado el 18 de enero de 2008
  5. ^ Plug-ins en apple.com; consultado el 18 de septiembre de 2011
  • COM en lenguaje C simple
Obtenido de "https://es.wikipedia.org/w/index.php?title=IUnknown&oldid=1093866324"