An interface is the fundamental abstraction a host uses to define an area of functionality to be implemented by plug-in developers. All interactions between a host and plug-in occur through an interface. In programming terms, an interface represents a function table where each function has a specific semantic meaning.
An interface constitutes a contract between the host and plug-in. This contract includes
A group of functions cannot rightly be considered an interface unless there is a specific definition of exactly what each function is supposed to do.
For example, consider an interface with one function that takes a single integer and returns an integer. Without a definition of behavior, any function that takes and returns an integer might be considered an implementation of that interface. To address this ambiguity, the expected behavior of each function in the interface is also "part" of that interface. A plug-in host developer must provide a header file and documentation to potential plug-in developers describing the functions that make up the interface, and exactly how the functions are expected to behave. It is critical that the plug-in developer know exactly what is required to correctly implement the interface.
Interfaces in the PlugIn Services model are identical to the interfaces defined by Microsoft's COM architecture. When implemented in C++, all PlugIn Services interfaces inherit the IUnknown interface, and in C, all PlugIn Services interface function tables must include the IUnknown functions. At runtime, the host uses the IUnknown interface to find and obtain access to other interfaces implemented by the plug-in. See the section Defining Types and Interfaces for more information about IUnknown and implementing a PlugIn Services interface.