Intro to COM

Download Report

Transcript Intro to COM

Intro to COM
What is it and how do I use it?
Objectives
• Teach the fundamentals of COM.
• Understand the reason for using it.
• Learn to make a simple in-process server.
COM 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.
What does it do?
• It allows for “Plug and Play” software.
• Helps to create distributed systems
transparently.
Why 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.
Why should you learn COM?
• Rapid Application Development
• Seamless application updates
• Build great apps without reinventing the
wheel
• Interface different systems with ease
Component Hierarchy
• Components are made
up of objects
• Objects are made up
of interfaces
• Interfaces are made up
of member functions
What makes an object?
• Objects support
object-oriented
principles:
encapsulation
polymorphism
inheritance?
• Conceptual in nature
• Known only through
interfaces
Interfaces
Object
What makes an object?
Clients can interact with any object without
knowing which object with which it interacts
Object 1
Client
Object 2
The Specifics
Identifiers
• 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
Interfaces
• 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();
};
IUnknown
• 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);
};
Accessing Objects
• CoCreateInstance
• Based on a class ID
(CLSID)
• Specify requested
interface
• Object can be anywhere
STDAPI CoCreateInstance(
REFCLSID rlcsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID *ppv
);
Where do components live?
•
•
•
•
In-Process servers (.dll)
Out-of-Process servers (.exe)
Remote servers (.exe)
ActiveX (.ocx)
Uses
•
•
•
•
•
•
ActiveX
DCOM
DirectX
Automation
OLE
etc.
Recommended Reading
• The definitive beginner’s 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