Footnotes

1. Under Microsoft Windows, this key is created using the standard Windows API for registry manipulation. Other COM implementations may include their own functions as necessary, as long as it's consistent on a given platform. Such functions are not part of this specification. [Back]

2. Note that the example code given below illustrates one of many ways a class factory object can be implemented. [Back]

3. Again, the term .DLL is used generically to describe any shared library as supported by a given COM platform. [Back]

4. Under Microsoft Windows this means listing the function in the EXPORTS section of a module definitions file or using the __declspec(dllexport) keyword at compile-time. Other platforms may differ as to requirements here, but in any case the function must be visible to other modules within the same process, but not across processes. [Back]

5. Under Windows, CoGetClassObject, after loading the .DLL with CoLoadLibrary, call the Windows API GetProcAddress("DllGetClassObject") to obtain the pointer to the actual function in the .DLL. [Back]

6. This function is called in the COM Library loaded in the server's process space so it actually establishes the remote proxy and stub necessary to perform remote procedure calls. [Back]

7. Case-insensitive. This name originated in OLE 1.0 and has been maintained for such historical reasons and compatibility. [Back]

8. Under Microsoft Windows, the application usually starts shutdown by posting a WM_CLOSE message to its main window, simulating what happens when a user closes an application. This eventually causes the application to exit the WinMain function. [Back]

9. An interface with such an IUnknown is sometimes called an inner interface on the aggregated object. There may, in general, be several inner interfaces on an object. IRpcProxyBuffer, for example, is one. This is a property of the interface itself, not the implementation. [Back]