Footnotes

1. Connecting to objects through an "intelligent/persistent name" (moniker) falls into this category. [Back]

2. Any internally-used memory in COM and in-process objects can use any allocation scheme desired, but the COM memory allocator is a handy, efficient, and thread-safe allocator. [Back]

3. This rule is stronger than it might seem to need to be in order to promote more robust application interoperability. [Back]

4. Colloquially, of course, pronounced "scum." [Back]

5. Strictly speaking, the handler is simply the representative of a remote object that resides in the client's process and which internally contains the remote connection. There is thus always a handler present when remoting is being done, though very often the handler is a trivial one which merely forwards all calls. In that sense, handler is synonymous with the terms proxy object or object proxy. In practice the term handler tends to be used more when there is in fact a non-trivial handler, with proxy usually used when the handler is in fact trivial. [Back]

6. Readers more familiar with RPC than with COM will recognize client stub and server stub rather than proxy and stub, but the phrases are analogous. [Back]

7. OLE Controls use the Connectable Objects mechanisms extensively. [Back]

8. Note that this usage of the term multicasting may differ from what some readers are accustomed to. In some systems multicasting is used to describe a connection-less broadcast. Connectable objects are obviously connection oriented. [Back]

9. This specification recommends that the COM implementation on a given platform (Microsoft®Windows®, Apple® Macintosh®, and so forth.) include a standard storage implementation for use by all applications. [Back]

10. This mechanism, in fact, was employed by compound documents in Microsoft's OLE version 1.0. The problems describe here were some of the major limitations of OLE 1.0, which provided much of the impetus for COM's Persistent Storage technology. [Back]

11. The application would only create year, month, and day sub-storages for those days that had information in them, that is, the diary application would create sparse storage for efficiency. [Back]

12. Case sensitivity is a locale-sensitive operation: some characters compare case-insensitive-equal in some locales and -not-equal in others. In an IStorage implementation, the case-insensitive comparison is done with respect to the current locale in which the system is presently running. This has implications on the use of IStorage names for those who wish to create globally portable documents. [Back]

13. The word moniker is fairly obscure synonym for nickname. [Back]

14. One of the few instances of inheritance from one major interface to another, which the IMoniker designer later decided was actually less preferable to having a moniker implement IMoniker and IPersistStream separately. See the first footnote in Chapter 9. [Back]

15. OLE for Real-Time Market Data was formerly called the "WOSA Extensions for Real Time Market Data". More information on this and other industry-specific extensions to OLE is available from Microsoft. [Back]

16. Some readers may wonder why Uniform Data Transfer is defined using the Connectable Objects interfaced described previously. The reason is simple: UDT was designed as part of the original OLE 2.0 specification in 1991, and Connectable Objects were not introduced until the release of the OLE Controls specification in 1993. [Back]