GUIDs and TypeLibs and Interfaces
Unfortunately, to understand the different compatibility levels, the first
place we need to go is deep into the bowels of COM. At its heart, a COM component
provides services to its clients by exposing classes. By using these classes,
it is possible for clients to create objects and manipulate properties and methods
to their benefit. The set of properties and methods that are exposed by a class
(the ones that are declared as Public) is called its interface. The information
about the interface, including each property (name and data type) and method
(name, parameter list and data type) is contained in a type library, also called
a TypeLib. For VB components, the TypeLib is stored as a resource in the DLL/OCX
file. For C++ components, it is usually be found in a separate file with a .tlb
extension.
Now the first time you compile your ActiveX project, each interface (remember
that each class has its own set of properties and methods and therefore its own
interface) is automatically assigned a Globally Unique Identifier, or GUID. This
is a 128-bit number that is used to identify the interface. How unique? Well,
you would have to compile your application multiple times a second for well over
a century in order to generate a conflicting GUID. This GUID is stored in your
registry and acts as a link between the component's interface, the class name
and the file that contains the executable code.