Title: COM A Slideshow of Epic Proportions
1COMA Slideshow of Epic Proportions
- Sean Baxter
- http//www.eburg.com/baxters/
2What is COM?
- A standard for interoperable software
- A runtime library providing low-level or
hard-to-implement functionality - A competitive, capitalist marketplace for selling
functionality to application developers - An endless source of healthy obfuscation
3That Last Slide Was Pulled From Booboos Rear
End. What is COM, Really?
- A sacred covenant held by the worlds best
developers. All software functionality is
encapsulated through a COM class (coclass) and
exposed through COM interfaces
Mooooo
Blah Blah Blah Blah Blah Blah Blah Blah Blah
Booboo
4Interface and Coclass Fundamentals
- An interface is a group of methods
- A coclass is a group of interfaces
- All coclasses implement the IUnknown interface
- All other interfaces derive IUnknown
- Lollipop diagrams describe coclasses
5About Interfaces
- The client communicates with the server through
interface pointers (think base class pointers) - Methods implemented by the coclass are invoked
through interface pointers - Interface pointers are acquired through IUnknown
- Because all interfaces derive IUnknown, any
interface pointer on an object can be acquired
through any other interface pointer on the object - The method to acquire an interface pointer is
IUnknownQueryInterface (think dynamic_cast)
6More About Interfaces
- Interfaces are equivalent to C abstract base
classes - Because there is no standard thunk mechanism,
interfaces do not support multiple inheritance - Two IUnknown pointers point to the same object if
their values are equal - Dispatch interfaces are special case interfaces
allowed by the COM Specification
7Interfaces and Virtual Tables
- An interface pointer points to the corresponding
slice of a COM object - The first 4 bytes of this slice comprise a
pointer to the interfaces virtual table - Each slot in this virtual table is the address of
an interface method - A method implementation may be referenced by more
than one vtbl entry
8Interface Method Indirection
9Reference Counting
- To regulate destruction of objects, COM requires
that all coclasses implement a reference counter - COM objects can have their methods invoked from
other threads, processes, and even machines.
Reference Counting eliminates a number of
problems associated with synchronization
10Reference Counting Rules
- Each object is given a reference count of 1 upon
instantiation - IUnknownAddRef increments the reference count
- A successful IUnknownQueryInterface call
increments the reference count - IUnknownRelease decrements the reference count
- When the reference count is decremented to zero,
the object destroys itself
11So Why All These Interface and Reference Counting
Formalities?
- One of the most amazing features of COM objects
is location transparency COM marshals interfaces
between processes and remote computers - Reference counting guarantees that a client
cannot prematurely destroy a shared object - COM is language transparent unsophisticated
languages like Visual Basic, VBA, J-Script, and
VB-Script would not otherwise be able to properly
delete objects
12Speaking of Location Transparency...
- COM objects (servers) can be delivered in two
module types EXEs or DLLs (aka OCXs) - EXEs cannot run in-process
- DLLs can only run in-process
- A surrogate EXE can load a DLL to make it an
out-of-process server
13An In-process Server (same apartment)
14In-process Server(different apartment)
15Local Server
16Remote Server
17Things To Note
- All interface method calls are synchronous a
remote call to a New York server must complete
its round-trip before the client can continue
execution - Asynchronous services are available through
Microsoft Message Queue (MSMQ) and ICallFactory
(Windows 2000) - Encryption, authentication, and impersonation
services are available with remote server
connections (at least on NT)
18Confused?
Where Am I?
The Guy In The Back Row
19COM Owns You
- So what does all this nonsense about location
transparency and reference counting have to do
with anything? - Ever heard of OLE? Ever heard of ActiveX? You
may suspect that these have something to do with
COM...
20WRONG!
All will soon be clear
21MS MarketectureCommon Misperceptions
- OLE is a system of linking and embedding data
into a document (hence the acronym Object Link
and Embedding) - ActiveX, like Java, is a system for building web
page applets - Microsoft Transaction Server (MTS) processes
business data from the internet
Faery Tales!
22The Journey of COM
- Dynamic Data Exchange (DDE) was introduced while
the Earth was still cooling. - DDE was unsavory. MS unveils OLE 1.0 after the
villagers riot - OLE 1.0 is a big success but hard to program. MS
unveils OLE 2.0 for Windows 3.1 COM is born
(its 16bit) - Windows NT 3.5 is blessed with OLE (look ma - no
version number!) and true 32bit COM. OLE is now
Olè, which is synonymous with COM
23The Journey of COM (II)
- To celebrate Windows 95, MS blesses COM with the
apartment model - 1996 sees Windows NT 4. DCOM brings network and
multithreading enhancements to COM - Microsoft Transaction Server (MTS) becomes
available for NT Server. This doesnt process
web business data. Its a COM runtime
environment which allows components to run more
efficiently (solving scalability difficulties
often faced in processing business data)
24The Journey of COM (III)
- OLE-DB provides consistency when accessing data
from a variety of providers - MS makes web browsers a priority (IE3) and
simultaneously coins the term ActiveX, adding
to the COM marketecture. Like OLE, ActiveX is a
synonym for COM. - Microsoft Message Queue (MSMQ) delivers
asynchronous (and vastly more reliable) method
calls - Visual C 5.0 ships with ATL 2.1. OLE Control
creation has never been so easy!
25The Journey of COM (IV)
- Windows 2000 ships in 2004. Microsoft introduces
COM acronym COM is simply COM on Win2k - Win2k includes many COM updates including a third
threading model (the Neutral Threaded Apartment)
and integration of MTS into the COM runtimes - COM 2.0 delivers legendary COM virtual machine
- Windows NT 6 device contexts replaced by
DirectDraw surfaces. Classic OLE Control
interfaces deprecated for new, ultra-spiffy
interfaces
26COMprehension
- COM is a set of many, many technologies.
- COM is really Microsofts software engineering
strategy - Computer people (you) are betting the bank on
Microsoft - Microsoft is betting the bank on COM
- COM Owns You
27COM Defined
- A single sentence cant define COM, because COM
is such a monumental and omnipresent set of
technologies. - So what is a COM technology? Any software
creation that leverages interfaces and coclasses,
as described in the earlier slides.
28COM in Everyday Life
The Month View is from the Microsoft Windows
Common Controls-2 6.0 controls library
29Property Pages
How does Visual Basic know which properties to
put in the box?
30Events
How does Visual Basic know which events the
control exposes?
31What is a VB Control?
32What Functionality Does It Expose?
33Properties and Methods
34The Secret of Property Pages
35Property Page Coclasses
36Property Pages Abound!
37Standard Interfaces
- Programming sucks. Best to fall back on
platform-provided functionality - A container/client can interact with any
server/control simply by implementing the
required site interfaces - Application developers who license your
components are already familiar with the
interfaces - Standard interfaces can use the
Microsoft-provided proxy/stubs
38What Are Some COM-Based Technologies?
- OLE Controls
- OLE-DB
- ADO
- DAO
- DirectX
- TAPI 3.0
- Exchange Server
- Exchange Client
- Active Scripting
- CDO 2.0
- MAPI
- SQL-DMO
- SQL-NS
- Microsoft Repository
- Broadcast Architecture
- Still Image API
- Microsoft Multimedia
- Indexing Service
39Still More COM Technologies!
- Active Desktop
- IIS
- Microsoft Agent
- Microsoft Java SDK
- NetMeeting
- NetShow
- Microsoft Wallet
- Active Directory
- Active Accessibility
- Clustering Service
- Fax Services
- MSMQ
- RAS
- Synchronization Manager
- Structured Storage
- MTS
- MMC
- Windows Shell API
- all OLE Applications
40The Glory of COM
- COM eliminates thread synchronization and IPC/RPC
confusion - COM enables real polymorphism language
transparency and location transparency - COM mandates a consistency among component
interfaces to reduce learning curves - COM allows versionless updates
- COM is the best component standard it is by far
the most commercially successful
41DLL Server Mechanisms
- DllRegisterServer and DllUnregisterServer
manipulate the registry - DllCanUnloadNow tells COM when the module is not
being used - DllGetClassObject provides the client with the
class factory of the required COM object
42EXE Server Mechanisms
- A /RegServer argument registers the EXE
- A /UnregServer argument un-registers the EXE
- CoRegisterClassObject registers a class factory
for clients to connect to - RegisterActiveObject adds an object to the
Running Object Table (ROT)
43COM Object Instantiation
- CoGetClassObject (wrapped by CoCreateInstance and
CoCreateInstanceEx) launches a module and
retrieves its class factory - CoGetClassObjectFromURL downloads a module from
an URL, decompresses it, registers it, and
invokes CoGetClassObject on it - GetActiveObject loads an object off the ROT
44COM Security
- CoInitializeSecurity sets the authentication
requirements for the current process - The COSERVERINFO structure specifies the machine
name and authentication info for clients
connecting to remote objects - CoImpersonateClient allows the server to
impersonate the client when accessing other
servers
45Books of COMpetency
- The C Programming Language (Bjarne Stroustrup)
- Programming Windows (Charles Petzold)
- Advanced Windows (Jeffrey Richter)
- Design Patterns (Gamma, Helm, Johnson, Vlissides)
- Essential COM (Don Box)
46Hoorah For Reading!
- Effective COM (Box, Brown, Ewald, Sells)
- Inside OLE (Kraig Brockschmidt)
- Professional ATL COM Programming (Richard Grimes)
- Microsoft Systems Journal (www.microsoft.com/msj)
- Seans Web Page (www.eburg.com/baxters/)
47May the COM Be With You