170 likes | 284 Views
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)
E N D
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
Interfaces What makes an object? • Objects support object-oriented principles: • encapsulation • polymorphism • inheritance? • Conceptual in nature • Known only through 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
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
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) Interfaces interface ISquirrel : IUnknown { HRESULT EatNuts(); HRESULT ClimbTree(); HRESULT RunAway(); };
Base interface Polymorhic to all other interfaces Implements reference counting All other interfaces are retrieved through IUnknown IUnknown interface IUnknown { ULONG AddRef(); ULONG Release(); HRESULT QueryInterface(REFIID iid, void **ppObject); };
CoCreateInstance Based on a class ID (CLSID) Specify requested interface Object can be anywhere Accessing Objects 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