The rules of COM
state that for a client to communicate with a COM object, the COM
server must allocate the memory for the object, and all access to the
object must occur through a COM interface. COM is said to be a binary
standard because it further defines the memory layout of interfaces.
An interface is a pointer to a lookup table of functions. The pointer
is known as a vptr, and the lookup table of
functions is known as a
vtable. Thankfully, we
do not work with interfaces at the vptr and vtable level. If you were
working in C (not C++), you would have to code a vptr and a vtable by
hand, because the language does not offer any natural mappings of
these structures to high-level language features. C++ and Visual
Basic, however, do map interfaces to classes.
When a C++ developer marks a function as virtual in a class and creates an instance of the class or creates an instance of a class that derives from a class with virtual functions, the C++ compiler creates a virtual function table (vtable) to represent the virtual functions of the class. Remember, the vtable is an array of pointers to functions. To each class that has virtual functions or derives from a class that has virtual functions, the C++ compiler adds a hidden data member known as a vtable pointer (or vptr). This hidden member is a long integer (4 bytes) that stores the address of the vtable array that corresponds to the class. The first 4 bytes of an object in memory ...