170 likes | 296 Views
This guide provides a comprehensive introduction to the Component Object Model (COM) and its distributed counterpart, DCOM. Learn the fundamentals, including why COM is essential for modern software development, how to create in-process servers, and leverage existing software components. Discover the benefits of using COM, such as flexibility across programming languages, rapid application development, and effective object reuse. Dive into the hierarchical nature of components, from objects to interfaces, and understand the essential identifiers used in COM, such as GUIDs and CLSIDs.
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