Introduction to COM

This introduction gives more emphasis on COM as applied to Visual Basic

What is COM?

Component Object Model (COM) is a Microsoft standard for developing component based software. COM provides :

  • A definition - or model- for an object
  • Services for creation and destruction of the object
  • Services for communication between client and server

COM reuses the code in binary form. This makes it possible to write the component with different tool and use it in some other tool.

What are Advantages of COM?

  • Binary code reuse : You can write and use your COM components with different COM compliant development tools like VB, VC++, Delphi etc.
  • Cross-platform development : Even though Windows is the ultimate platform for COM development. COM can be used for other platforms also. Some vendors are providing support for UNIX.
  • Version Control : COM components are said to be self-versioning. You can install multiple versions of same COM component on the same machine. Your older applications continue to work the same way and you are free to utilize new functionality of the component for new applications

What are interfaces?

Interface is a set of properties and methods through which client and server component communicate with each other. Interfaces just provide details like method name, its parameters , return type etc. and not the actual implementation of the method. If you are a VB programmer then you can look at it this way-  each class within your EXE or DLL (which is a set of properties and methods) project represents an interface.

What are the requirements of a COM component?

To be recognized as a COM component all the objects must satisfy following conditions :

  • The object must be able to keep track of no. of connections made to it
  • The object must be capable of being queried by client for the methods or properties.

This functionality is provided by an interface called  IUnknown. This interface has following methods :

  • AddRef : called when a new client connects to it i.e. when you say Set x=new ...
  • Release : called when the object is destroyed i.e. when you say Set x=nothing
  • QueryInterface : which can query for methods supported by the object. VB does this automatically when you say Set x=new...

What are different types of COM components in VB?

  • ActiveX DLL
  • ActiveX EXE
  • ActiveX Controls
  • ActiveX Documents

What are in-process components ?

In process components are ActiveX DLLs which run in the same address space as that of client. The communication between client and in-process server is fast but if the server crashes it can also cause the client to crash.

What are out-of-process components?

Out-of-process components are ActiveX EXEs which run in their own address space. The communication between client and out-of-process server is slow because of marshalling. If the server crashes the client can still continue to function as the two processes are different.

What is marshalling?

When a client calls a method from out-of-process server component the required parameters need to be  sent across process boundaries. Packaging and transporting of all parameters and return values between client and server is known as Marshalling.

What are GUIDs?

GUID or Globally Unique Identifier is a 128-bit number generated using an algorithm which ensures its uniquely throughout the world.

GUID is key for identifying various COM components and their versions.

Before you use any component it needs to be registered with the operating system. The registration is nothing but adding certain GUIDs like ProgID, ClassID and type library, path etc. in the Windows registry (HKEY_CLASSES_ROOT section).

What are type libraries?

Type library provides information about a component like :

  • Definition of interfaces provided by the object
  • Information about properties, methods and events provided by the object
  • The parameter data types and return types of methods

Some tools create type library as a separate disk file ( typically .tlb or .olb ). Visual Basic embeds this information in the compiled DLL or EXE itself.

What is IDispatch interface?

IDispatch is an interface provided mainly for scripting languages to discover about properties and methods of a COM component. It also supports functionality of IUnknown. The interface provides following functions :

  • GetTypeInfoCount
  • GetTypeInfo
  • GetIDsOfNames
  • Invoke

What are dual interfaces?

Dual interface is a custom interface designed by a development tool which provides all the functionality of IDispatch plus some efficient mechanism to call the methods of the component.

The less sophisticated clients and scripting languages continue to use IDispatch methods but advance clients like VB can use the more efficient mechanism.

What is early binding and late binding?

  • Early binding means that the compiler has knowledge about an object at compile time
  • Late binding means that compiler do not have any knowledge about an object

Here, the 'knowledge' of an object refers to the properties and methods of an object. For a VB programmer early binding occurs when you say something like :

dim rs as new ADODB.Recordset

Since you have specified exact type of object, compiler already knows about the object. You can check it in VB IDE also. If you type rs. then VB IDE automatically presents you with the properties and methods of record set. You will not get such a list if you declare rs as :

dim rs as Object

As you might have guessed late binding is not an efficient mechanism and you should avoid using it as far as possible.

What is instancing of a component?

When you open an ActiveX DLL or EXE project each class has a design time property called Instancing. This property determines how your objects will be created. There are three main categories :

  • Single use : in which case each requesting client is provided with new copy of the component
  • Multi use : in which case multiple clients share the same instance of the component
  • PublicNotCreatable : this means instance of your component can not be created directly by 'New' or 'CreateObject' but some other component returns one to you (generally as return value from a function).

What is most efficient way to create objects?

In VB you can create objects using following methods :

  • dim x as new myclass
  • dim x as myclass
    set x=CreateObject("progID")
  • dim x as myclass
    set x=new myclass

Out of these methods the first method is least efficient and you should actually never use it (unless you are doing testing etc.)

The second method uses standard COM services and is the only way to use in scripting languages like VBScript. If you are coding in VB and creating multiple instances of same class then try using last method instead

The last method also uses standard COM services but is optimized for creating multiple objects of same class. Thus it is the most efficient.

What is interface inheritance?

Unlike languages like C++ VB do not provide inheritance of implementation. VB provides something called interface inheritance. Which means you can inherit interface ( or declaration or syntax ) of methods and not the implementation( or definition).

You can inherit classes using Implements <class name> keyword

How do I provide events to my class?

There are four basic steps in designing and using an event :

  • Declare an event in your class
    public Event myevent(param1 as integer)
  • Raise event in some of the method of the class
    RaiseEvent myevent(100)
  • Now, at client side declare object of your class
    dim WithEvents x as new myclass
  • Write code to handle myevent event
    public sub myevent(param1 as integer)
        msgbox param1
    end sub

Bipin Joshi is an independent software consultant and trainer by profession specializing in Microsoft web development technologies. Having embraced the Yoga way of life he is also a meditation teacher and spiritual guide to his students. He is a prolific author and writes regularly about software development and yoga on his websites. He is programming, meditating, writing, and teaching for over 27 years. To know more about his ASP.NET online courses go here. More details about his Kriya and Meditation online course are available here.

Posted On : 18 December 2000

Tags : Components