# Designing COM Interfaces

As an OLE developer, you implement and use objects that are based on the Component Object Model (COM). COM interfaces specify a contract between the interface implementor and its user. The contract applies to every COM object that supports that interface.

OLE provides a standard set of interfaces, but these OLE-provided interfaces may not be perfectly suited to your needs. Through custom interfaces, you can create new ones tailored to fulfill the specific needs of your application. Custom interfaces are extensions to the COM standard; they let you extend the standard behavior and still take advantage of the services provided by the base interface. Like all COM interfaces, custom interfaces derive from the IUnknown interface and must contain the three methods of IUnknown. Otherwise, they can support a wide range of methods and parameters. (Note that, currently, custom interfaces cannot include asynchronous methods. Asynchronous methods may be supported in future versions of OLE.)

Once the interface is written, anyone can use it. Calls to methods in COM interfaces can cross process boundaries as long as both processes are running on the same machine.

This chapter introduces custom interfaces and explains how to implement them. OLE experience is a prerequisite, as is a basic knowledge of RPC. Refer to The Component Object Model for basic information on COM required to design a COM interface, including threading models, and COM Clients and Servers for information on how clients and servers interact.

Custom interfaces require custom implementations of the IMarshal interface, so refer also to the section Inter-object Communication for a description of how this works. Refer to the RPC Programmer’s Guide and Reference for information about the RPC programming environment.