IUnknown

Last updated

In computer programming, the IUnknown interface is the fundamental interface in the Component Object Model (COM). The COM specification [1] mandates that COM objects must implement this interface. Furthermore, every other COM interface must be derived from IUnknown. IUnknown exposes two essential features of all COM objects: object lifetime management through reference counting, and access to object functionality through other interfaces.

An IUnknown (or IUnknown-derived) interface consists of a pointer to a virtual method table that contains a list of pointers to the functions that implement the functions declared in the interface, in the order that they are declared in the interface. The in-process invocation call overhead is therefore identical to virtual method calls in C++. [2]

Methods

The IUnknown interface exposes three methods: QueryInterface, AddRef, and Release: [3]

interfaceIUnknown{virtualHRESULTQueryInterface(REFIIDriid,void**ppvObject)=0;virtualULONGAddRef()=0;virtualULONGRelease()=0;};

The IUnknown interface ID is defined as a GUID with the value of {00000000-0000-0000-C000-000000000046}.

A COM component's interfaces are required to exhibit the reflexive, symmetric, and transitive properties. The reflexive property refers to the ability for the QueryInterface call on a given interface with the interface's ID to return the same instance of the interface. The symmetric property requires that when interface B is retrieved from interface A via QueryInterface, interface A is retrievable from interface B as well. The transitive property requires that if interface B is obtainable from interface A and interface C is obtainable from interface B, then interface C should be retrievable from interface A.

Miscellaneous

See also

References

  1. The Component Object Model Specification, archived from the original on 2004-02-15
  2. "The Component Object Model". microsoft.com. Microsoft. 30 May 2018. Retrieved 12 February 2019.
  3. IUnknown definition at microsoft.com Archived 2013-07-11 at the Wayback Machine ; accessed 18-Jan-2008
  4. ActiveX Controls at microsoft.com; accessed 18-Jan-2008
  5. Plug-ins at apple.com; accessed 18-Sept-2011