Title: Intro to COM
1Intro to COM
- What is it and how do I use it?
2Objectives
- Teach the fundamentals of COM.
- Understand the reason for using it.
- Learn to make a simple in-process server.
3COM Defined
- COM (Component Object Model) and DCOM
(Distributed COM) - are a set of binary and network standards for the
modeling of objects and their communications.
4What does it do?
- It allows for Plug and Play software.
- Helps to create distributed systems transparently.
5Why should you learn COM?
- Flexibility can be used from and written in all
popular languages. - Saves tremendous time (after the initial learning
curve) - Use of existing objects
- Object Reuse C tried to address this issue,
but just made it easy to reuse source code. - So you can use DCOM.
6Why should you learn COM?
- Rapid Application Development
- Seamless application updates
- Build great apps without reinventing the wheel
- Interface different systems with ease
7Component Hierarchy
- Components are made up of objects
- Objects are made up of interfaces
- Interfaces are made up of member functions
8What makes an object?
- Objects support object-oriented principles
- encapsulation
- polymorphism
- inheritance?
- Conceptual in nature
- Known only through interfaces
Object
9What makes an object?
- Clients can interact with any object without
- knowing which object with which it interacts
Object 1
Client
Object 2
10The Specifics
11Identifiers
- GUID (globally unique identifiers)
- are stored in 16-byte (128 bit) structures
- CLSID (class identifier GUID)
- IID (interface identifier GUID)
IUnknown
- QueryInterface
- Returns a pointer to requested Interface
- AddRef
- Increases the RefCount
- Release
- Decreases the RefCount
12Interfaces
- An interface is a set of similar methods
- Analogous to a C class
- Binary level, not source code level
- Indentified by an Interface Identifier (IID)
interface ISquirrel IUnknown HRESULT
EatNuts() HRESULT ClimbTree() HRESULT
RunAway()
13IUnknown
- Base interface
- Polymorhic to all other interfaces
- Implements reference counting
- All other interfaces are retrieved through
IUnknown
interface IUnknown ULONG AddRef() ULONG
Release() HRESULT QueryInterface(REFIID iid,
void ppObject)
14Accessing Objects
STDAPI CoCreateInstance( REFCLSID
rlcsid, LPUNKNOWN pUnkOuter, DWORD
dwClsContext, REFIID riid, LPVOID ppv )
- CoCreateInstance
- Based on a class ID (CLSID)
- Specify requested interface
- Object can be anywhere
15Where do components live?
- In-Process servers (.dll)
- Out-of-Process servers (.exe)
- Remote servers (.exe)
- ActiveX (.ocx)
16Uses
- ActiveX
- DCOM
- DirectX
- Automation
- OLE
- etc.
17Recommended Reading
- The definitive beginners guide to COM
- Inside COM by Dale Rogerson
- A great online tutorial that summarizes much of
Inside COM - http//beta.develop.com/comtutorial
- For the complete history and theory
- Inside OLE by Kraig Brockschmidt