Implementing COM Objects with Wizards

From RAD Studio
Jump to: navigation, search

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:

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:

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:

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

COM server

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.

Automation Servers

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.

Type Library

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.