Component Object Model - PowerPoint PPT Presentation

1 / 57
About This Presentation
Title:

Component Object Model

Description:

IUnknown* pUnk; CoInitialize(NULL); ::CLSIDFromProgID(L'TestTools', &clsid) ... pUnk- Release(); pSpl- Release(); CoFreeUnusedLibraries(); CoUninitialize ... – PowerPoint PPT presentation

Number of Views:71
Avg rating:3.0/5.0
Slides: 58
Provided by: ccEeN
Category:
Tags: component | model | object | punk

less

Transcript and Presenter's Notes

Title: Component Object Model


1
Component Object Model
  • Shyh-Kang Jeng
  • Department of Electrical Engineering/
  • Graduate Institute of Communication Engineering
  • National Taiwan University

2
References
  • D. Chappell, Understanding ActiveX and OLE,
    Microsoft Press, 1996.
  • D. J. Kruglinski, Inside Visual C, Microsoft
    Press, 1995.
  • A. Denning ??, ????, OLE????????, ??, 1996.

3
Component Object Model
  • ActiveX and OLE rest on the foundation of COM
  • Understanding COM is a prerequisite to
    understanding anything else in ActiveX or OLE

4
Component Object Model
  • How should one chunk of software access the
    services provided by another chunk of software?
  • COM A standard approach to access all kinds of
    software services, regardless of how they are
    provided
  • COM is transforming the way software is
    constructed

5
Benefits of COM
  • Offers the benefits of object orientation
  • Provides consistency
  • Is language independent
  • COM defines a binary interface that objects must
    support
  • Simple and efficient versioning
  • Available on Windows, Windows NT, Macintosh, MVS
    up to now
  • DCOM allows COM objects on all kinds of systems
    to interact

6
Communications between Software
7
Basic COM Concept
COM Library
Binary Code of a Client Class
8
Basic COM Concept
9
Basic COM Concept
10
Basic COM Concept
11
A COM Object
12
Identifying an Interface
  • Human-readable name
  • ISpellChecker, IThesaurs
  • Globally Unique Identifier (GUID)
  • Interface Identifier (IID)
  • Each GUID is unique in time and space
  • Timestamp
  • Address on the machines network interface card
  • 16 bits

13
GUID Generator
14
Interface Definition Language
  • object, uuid(
  • E7CD0D00-1827-11CF-
  • 9946444553540000)
  • interface ISpellChecker IUnknown
  • import unknown.idl
  • HRESULT LookUpWord(
  • in OLECHAR word31,
  • out boolean found )
  • HRESULT AddToDictionary(
  • in OLECHAR word31)
  • HRESULT RemoveFromDictionary(
  • in OLECHAR word31)

15
Immutability of the Interfaces
  • Once an interface has been implemented in
    released software, it cannot be changed
  • To add new functionality or to modify existing
    functionality requires defining an entirely new
    interface, with a new and different IID
  • The creator of the software is free to stop
    supporting the original interface but is
    absolutely prohibited from changing it

16
New Version Problem
  • A COM object that supports ISpellChecker
  • Add support for a thesaurus function through
    IThesaurus
  • Effect on the client using the old version with
    the old or new version installed
  • Effect on the client using the new version with
    the new version installed
  • Effect on the client using the new version with
    the old version installed

17
Changing Features to an Interface
  • The objects creator must define a new interface,
    say ISpellChecker2 that includes the new or
    changed methods and the COM object continues to
    support ISpellChecker as before, but it now also
    support ISpellChecker2
  • Clients that are unaware of the upgrade never ask
    for a pointer to ISpellChecker2 and so arent
    affected by the changes they continue to use
    ISpellChecker as before

18
IUnknownQueryInterface
1
A
COM object
Client
2
B
3
19
Reference Counting
  • Whenever the object passes out a pointer to one
    of its interface, it adds 1 to reference count.
    If one client passes an interface pointer to
    another client, the client who receives the
    pointer must invoke the AddRef method using that
    pointer
  • The client must call Release on the interface
    pointer to decrement the reference count when it
    has finished using the interface
  • An object destroys itself when its reference
    count drops to 0

20
Binary Format of an Interface
Object
QueryInterface( )
Client
Pointer to Method 1
AddRef( )
Pointer to Method 2
Release( )
Pointer to Method 3
LookUpWord( )
Pointer to Method 4
AddToDictionary( )
Pointer to Method 5
Pointer to Method 6
RemoveFromDictionary( )
vtable
21
COM Classes
  • Class identifier (CLSID)
  • An object of a specific class supports a certain
    set of interfaces
  • Adding interfaces to an object without changing
    its class is not prohibited by COM
  • An objects class identifies a particular
    implementation of a group of interfaces
  • Its possible to have many classes supporting the
    same set of interfaces

22
Kinds of COM Servers
Machine X
Machine Y
23
COM Library
  • The COM library implements a group of functions
    that supply basic services to objects and their
    clients
  • The COM librarys services are accessed through
    ordinary function calls
  • The names of COM library functions usually begin
    with the prefix Co- for example, CoCreateInstance

24
System Registry
  • The classes of all objects that the COM library
    will be asked to create on this machine must be
    registered
  • Registry mapping includes
  • CLSID
  • Kinds of servers
  • Pathname for the file containing the servers DLL
    or executable, or for where to find remote
    servers executable

25
Creating a Single Object
4
Client
Object
Server
3
1
2
CLSID_X
DLL
COM library
EXE
CLSID_Y

26
Class Factories
  • Class factory is a kind of objects that can
    create objects of one specific class
  • Class factories are COM objects in their own
    right accessed via their interfaces
  • CoCreateInstance uses a class factory that it
    hides from the client
  • CoCreateInstance uses the methods in the
    IClassFactory interface

27
IClassFactory Interface
  • As a class factory, an object must support the
    IClassFactory interface
  • IClassFactory
  • CreateInstance
  • LockServer
  • IClassFactory2
  • A client calls CoGetClassObject to get a pointer
    to a class factory

28
Using Class Factory
4
3
2
1
Server
29
Emulation
  • An Old class is replaced by a new class with
    different CLSID
  • A COM library function CoTreatAsClass
  • when used to create an object using the old
    CLSID will result in instantiating an object with
    the new CLSID
  • (setting up an emulation relationship between
    the two CLSIDs in the system registry)

30
Initializing COM Objects
  • A client usually asks a newly created objects to
    initialize itself
  • The objects data must be stored in a persistent
    way
  • The first interface pointer a client requests
    when a new object is created is usually the one
    for an interface containing the objects
    initialization function

31
Calling Sequence in VC (1/2)
  • CLSID clsid
  • IClassFactory pClf
  • IUnknown pUnk
  • CoInitialize(NULL)
  • CLSIDFromProgID(LTestTools,
  • clsid)
  • CoGetClassObject(clsid, IID_IClassFactory,
  • (void) pClf)

32
Calling Sequence in VC (2/2)
  • pClf-gt
  • CreateInstance(IID_Iunknown, (void)pUnk)
  • pUnk-gt
  • QueryInterface(IID_ISpellChecker,
    (void)pSpl)
  • pSpl-gtLookUpWord( Test, found )
  • pClf-gtRelease()
  • pUnk-gtRelease()
  • pSpl-gtRelease()
  • CoFreeUnusedLibraries()
  • CoUninitialize()

33
Reusing COM Objects
  • One COM object cant reuse anothers code through
    inheritance
  • Containment (delegation)
  • Aggregation

34
Marshaling and Type Information
  • Marshaling makes that the client can invoke the
    methods in the same way, regardless of where the
    object is implemented
  • To acquire the information necessary to perform
    marshaling, and sometimes for other reasons as
    well, it can be useful to obtain type information
    about the project

35
Accessing a COM Object in an In-Process Server
Client
Client process
36
Accessing a COM Object in a Local Server
37
Accessing a COM object in a Remote Server
Stub
Client
Server Process
Client process
Machine Y
Machine X
38
Marshaling and Unmarshaling
  • Marshaling
  • Packaging a calls parameters into a standard
    format for transmission
  • Unmarshaling
  • Unpackaging from the standard format into a
    format appropriate for the receiving process
  • Marshaling Code (Marshaler)
  • MIDL compiler can read the IDL description of an
    interface and automatically generate the
    necessary marshalling code for this interface,
    contained in a proxy and a stub

39
Type Information
  • Type information includes a description of
    everything a client needs to know to use an
    objects service. For example, the type
    information of an object includes a list of the
    interfaces methods and properties, along with a
    description of the parameters for those methods.
  • All type information today should be defined
    using IDL

40
Type Library
41
IDL Example
  • object,uuid(
  • E7CD0D00-1827-11CF-9946- 444553540000)
  • interface ISpellChecker IUnknown
  • import unknown.idl
  • HRESULT LookUpWord(
  • in OLECHAR word31,
  • out boolean found )
  • HRESULT AddToDictionary(
  • in OLECHAR word31)
  • HRESULT RemoveFromDictionary(
  • in OLECHAR word31)

42
IDL Example
  • object,uuid(
  • 5FBDD020-1863-11CF-9946-444553540000)
  • interface IThesaurus IUnknown
  • HRESULT Return Synonym(
  • in OLECHAR word31,
  • out OLECHAR synonym31 )

43
IDL Example
  • uuid(
  • B253E460-1826-11CF-9946-444553540000),
    version(1.0)
  • library TextToolsLib
  • importlib (stdole32.tlb)
  • uuid(
  • B2ECFAA0-1827-11CF-9946-444553540000)
  • coclass CoTextTools
  • interface ISpellChecker
  • interface IThesaurus

44
Automation
  • Making applications programmable
  • Programmability through macro languages
  • Cryptic
  • No standard exists
  • One choice for an application
  • Automation
  • General programmability with COM
  • Use developers favorite programming tools to
    build applications on top of the functions
    already provided by existing software

45
Automation Example
46
IDispatch and dispinterfaces
47
Clients and Servers
Application
Client
IDispatch
IServices
IDispatch
IDispatch
48
dispinterfaces and Marshaling
  • Using a dispinterface for marshaling requires
    only a single proxy and stub
  • The parameters for a dispinterface method are
    packaged into a variant
  • The client passes the variant along with the
    DISPID on the call to IDispatchInvoke
  • The object that implements the dispinterface
    unpackages the variant
  • Results are wrapped in a variant by the object
    and then returned to and unwrapped by the client

49
A Visual Basic Example
  • Sub SpellCheck( )
  • Dim Obj As Object
  • Set Obj CreateObject(
  • Excel.Application)
  • Word InputBox(Enter word)
  • If Obj.CheckSpelling(Word) Then
  • MsgBox( Valid word )
  • Else
  • MsgBox( Word not found )
  • End If
  • End Sub

50
Dual Interfaces
51
Dual Interfaces
  • object, uuid( E7CD0D00-1301-11CF-
  • 9946-444553540000), dual
  • Interface ISpellChecker IDispatch
  • import unknown.idl
  • import oaidl.idl
  • HRESULT LookUpWord(in BSTR word,
  • out boolean found)
  • HRESULT AddToDictionary(
  • in BSTR word)
  • HRESULT RemoveFromDictionary(
  • in BSTR word)

52
Dual Interfaces
  • uuid(
  • B623E460-1837-11CF-9946-444553540000),
    version(1.0)
  • library SpellCheckerLib
  • importlib (stdole32.tlb)
  • uuid(
  • B23EFAA0-1849-11CF-9946-444553540000)
  • coclass CoSpellChecker
  • interface ISpellChecker

53
Persistence and Monikers
  • An objects persistent data is information about
    the objects state thats saved between
    instantiations of the object
  • A mechanism that lets objects store and retrieve
    their persistent data is called a persistence
    service
  • An objects client typically controls when the
    objects persistent data is loaded and saved

54
Structured Storage
Disk file (Compound file)
55
Using Structured Storage
COM object
56
Moniker
  • A moniker is a name for a specific object
    instance, one particular combination of CLSID and
    persistent data
  • A moniker is an object that supports the IMoniker
    interface
  • Each moniker has its own persistent data, which
    contains everything the moniker needs to start
    and initialize the single object instance the
    moniker identifies

57
Using a Moniker
Write a Comment
User Comments (0)
About PowerShow.com