Implementing COM Objects with Wizards
Go Up to COM basics Index
Delphi makes it easier to write COM server applications by providing wizards that handle many of the details involved. Delphi provides separate wizards to create the following:
- A simple COM object
- An Automation object
- A Type library
- An ActiveX library
The wizards handle many of the tasks involved in creating each type of COM object. They provide the required COM interfaces for each type of object. With a simple COM object, the wizard implements the one required COM interface, IUnknown, which provides an interface pointer to the object.
Simple COM Object Interface:
The COM object wizard also provides an implementation for IDispatch if you specify that you are creating an object that supports an IDispatch descendant.
For Automation and Active Server objects, the wizard implements IUnknown and IDispatch, which provides automatic marshaling.
Automation Object Interface:
For ActiveX control objects and ActiveX forms, the wizard implements all the required ActiveX control interfaces, from IUnknown, IDispatch, IOleObject, IOleControl, and so on. For a complete list of interfaces, see the reference page for Vcl.AxCtrls.TActiveXControl object.
ActiveX Object Interface:
The following table lists the various wizards and the interfaces they implement:
Delphi wizards for implementing COM, Automation, and ActiveX objects :
Wizard | Implemented interfaces | What the wizard does |
---|---|---|
IUnknown (and IDispatch if you select a default interface that descends from IDispatch) |
Exports routines that handle server registration, class registration, loading and unloading the server, and object instantiation. Creates and manages class factories for objects implemented on the server. Provides registry entries for the object that specify the selected threading model. Declares the methods that implement a selected interface, providing skeletal implementations for you to complete. Provides a type library, if requested. Allows you to select an arbitrary interface that is registered in the type library and implement it. If you do this, you must use a type library. | |
IUnknown, IDispatch |
Performs the tasks of a COM server wizard (described above), plus: Implements the interface that you specify, either dual or dispatch. Provides server-side support for generating events, if requested. Provides a type library automatically. | |
None, by default |
Creates a new type library and associates it with the active project. | |
ActiveX library |
None, by default |
Creates a new ActiveX or Com server DLL and exposes the necessary export functions. |
You can add additional COM objects or reimplement an existing implementation. To add a new object, it is easiest to use the wizard a second time. This is because the wizard sets up an association between the type library and an implementation class, so that changes you make in the type library editor are automatically applied to your implementation object.