Creating a New COM Component

    Contents
    1. Step by Step Instructions
    2. First Look at the Generated Code
    3. Implementing the Component
    4. Running the Component

This first tutorial describes creating a COM component from a COM definition file that is either an IDL file or a Type Library. The tutorial focuses on creating an in-process (DLL) component, called StringManipulator. The component exposes one interface IString that includes the functions ReplaceSubstring and PruneAll corresponding respectively to the features replace_substring and prune_all of the class STRING from the EiffelBase library. IString also exposes the property String which represents the manipulated string. The property can be set or read.

Step by Step Instructions

  1. Launch EiffelCOM Wizard. Note: if you are running Windows 7, you will need to right-click "EiffelCOM Wizard" in the start menu and select "Run as administrator".
  2. In the Current project input field, type in string_manipulator_server and press enter.
  3. In Project Type, choose Create a new COM component.
  4. In Component Information, click the browse button (the button with ...) and open the file $ISE_EIFFEL\examples\com\wizard\string_manipulator\string_manipulator.idl where $ISE_EIFFEL represents the path to the EiffelStudio installation directory.
  5. Make sure Generate and use marshaller DLL is not checked.
  6. Click Next.
  7. In Component Type, choose In-process (*.dll).
  8. In Generation Options, click the browse button and select the directory where the project should be created (which we will later refer to as the destination folder). Choose $ISE_EIFFEL\examples\com\wizard\string_manipulator\generated\component where $ISE_EIFFEL represents the path to the EiffelStudio installation directory.
  9. Make sure both Compile C code and Compile Eiffel code are checked.
  10. Make sure Clean destination folder prior to generation is selected.
  11. Click Generate.
  12. Wait until the wizard is done.

Note: Because Eiffel as a language has evolved somewhat since the EiffelCOM Wizard was last released, you will need to go into the project file under the "Server" subdirectory (string_manipulator_idl.ecf, preferrably from within EiffelStudio) and change the following settings for this example to compile: Select "Target" in the navigator pane, then change the "Void safety" setting to "No", and "Syntax" to "Transitional syntax". Click OK in the Project Settings dialog box. Now you can finish the compile from within EiffelStudio. Note that there will be a few warnings about obsolete calls. These can be ignored for now.

First Look at the Generated Code

At the end of the processing the EiffelStudio button becomes enabled. Click on it. This will automatically start EiffelStudio with the generated project so you can navigate more easily through the created Eiffel classes. You can save the processing output by clicking the Save button.

The deferred class STRING_MANIPULATOR_COCLASS represents the component and exposes all its functionality. It inherits from ISTRING_INTERFACE which corresponds to the IString interface and has one heir STRING_MANIPULATOR_COCLASS_IMP which implements all the deferred features. The default implementation in the heir is empty.

Implementing the Component

To do something more interesting than merely returning an error to the client, edit the implementation of the STRING_MANIPULATOR_COCLASS_IMP class. There is an implementation of the class in $ISE_EIFFEL\examples\com\wizard\string_manipulator\server\. Copy this file over to $ISE_EIFFEL\examples\com\wizard\string_manipulator\generated\component\server\component and freeze the project. Voila! You have your first EiffelCOM component up and running.

Running the Component

The component needs to be registered prior to being loaded. Register an out-of-process component using the following syntax: system_name.exe -Regserverwhere system_name is the name of the component executable file. Register an in-process component using the regsvr32 utility using the following syntax: regsvr32 system_name.dllwhere system_name is the name of the dll (e.g. string_manipulator). So to register the StringManipulator component, run: cd $ISE_EIFFEL\examples\com\wizard\string_manipulator\generated\component\server\EIFGENs\default\W_code regsvr32 string_manipulator_idl.dllOnce registered, follow the steps described in Accessing a COM Component to build the component's client.

See Also:
Creating a new component from an Eiffel Project
Accessing a COM Component.

f8298b7d-c1a4-c8cc-1821-066f90e7e6e0