En la programación de computadoras, el IUnknown (personalizado) es la interfaz fundamental en el modelo de objetos componentes (COM). Los publicados especificación COM mandatos que los objetos COM deben implementar mínimamente esta interfaz. Además, cada dos interfaz COM debe derivarse de IUnknown. IUnknown expone dos características esenciales de todos los objetos COM: objeto de gestión por vida a través de recuento de referencias, y el acceso a diferentes predefinidos de interfaces.
Una costumbre interfaz 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 mismo orden en que se declaran en la interfaz. La invocación de arriba en proceso es, por tanto, comparable a las llamadas a métodos virtuales en C++.
Métodos
La interfaz IUnknown expone tres métodos: QueryInterface
, AddRef
y Release
.[1]
QueryInterface
permite al llamante para recuperar las referencias a diferentes interfaces de los implementos de componentes. Es similar a dynamic_cast<>
en C++ o arroja
en Java y C#. Específicamente, se utiliza para obtener un puntero a otra interfaz, dado un GUID que identifica de forma exclusiva esa interfaz (comúnmente conocido como un ID de interfaz, o IID). Si el objeto COM no implementa esa interfaz, se devuelve un error E_NOINTERFACE lugar.
AddRef
se usa para incrementar la cuenta de referencia cuando un nuevo cliente adquiere el objeto. Devuelve la nueva cuenta de referencia.
Release
se utiliza para disminuir el recuento de referencia cuando los clientes han terminado de usar el objeto. Devuelve la nueva cuenta de referencia. El objeto COM se eliminará a sí mismo cuando la referencia de conteo llega a cero.
interface IUnknown {
virtual HRESULT QueryInterface(riid REFIID,void **ppvObject) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
};
El IUnknown ID de interfaz se define como un GUID con el valor de {00000000-0000-0000-C000-000000000046}.
Se requieren las interfaces de un componente COM para exhibir las reflexiva, simétrica y transitiva propiedades. La propiedad reflexiva se refiere a la capacidad para el QueryInterface
llamada en una interfaz dada con la identificación de la interfaz para devolver la misma instancia de la interfaz. La propiedad simétrica requiere que cuando la interfaz B se recupera de una interfaz a través de QueryInterface
, interfaz A es recuperable desde la interfaz B también. La propiedad transitiva requiere que si la interfaz B se puede obtener desde la interfaz A y C es la interfaz que se puede obtener a partir de la interfaz B, entonces la interfaz C debe ser accesible a partir interfaz A.
Varios
- Los componentes diseñados bajo el ActiveX estándar deben, como mínimo, implementar la interfaz IUnknown.[2]
- IUnknown sirve como la base para el sistema CFPlugIn Core Foundation de Mac OS X.[3]
- En el desarrollo de aplicaciones Mozilla, esta interfaz también se conoce como nsISupports.
Referencias
- ↑ Definición de IUnknown por microsoft.com; consultado el 18 de enero de 2008.
- ↑ Controles ActiveX por microsoft.com; consultado el 18 de enero de 2008.
- ↑ Plug-ins por apple.com; consultado el 18 de septiembre de 2011.
Enlaces externos
- COM en pleno C (en inglés)