Microsoft Component Object Model (COM)

Download Report

Transcript Microsoft Component Object Model (COM)

Microsoft’s Distributed
Component Object Model (DCOM)
A semi-technical overview
Jim Ries
[email protected]
Updated 10/5/1999
Genealogy

DCOM comes from COM and OSF
(now Open Group) DCE
 DCE
 Remote
Procedure Calls (RPC)
 Interface Definition Language (IDL)
 Component
Object Model (COM)
 ORPC

OMG CORBA - a parallel standard
 Different
RPC
 Different IDL
 COM proxy == CORBA stub
 COM stub == CORBA skeleton
Microsoft proprietary,
but . . .

Open Group’s COMSource:
http://www.opengroup.org/comsource/

Software AG’s EntireX:
http://www.softwareag.com/entirex/default.htm

The Active Group:
http://www.activex.org/
COM Goals









Encapsulation (separate
implementation from interface)
Versioning
Execution context independence
Language independence
Object Creation / Lifetime Control
Standard error code (HRESULT)
Solve object discovery problem
Scripting
The Holy Grail of Reuse
Alphabet soup:
COM/OLE/ActiveX



COM is a binary standard and a
style for creating objects.
OLE is (was) a set of COM
interfaces for embedding
documents (originally “Object
Linking and Embedding”).
ActiveX is a marketing buzz-word
meaning COM and/or OLE, but
usually applied to Internet-oriented
components.
Later and later binding




“Editor inheritance” binds at
compile time.
Link libraries (.LIB) bind to
“components” at link time.
Dynamic link libraries (.DLL) bind
at run time, but need a header at
compile time, and path at runtime.
COM components bind at runtime
and may need neither a header,
nor a path! (though typelib contains
header-like “meta-data”)
Interfaces





COM enforces the concept of
interfaces being separate from
implementation.
Interface == Abstract Base Class
Objects support multiple interfaces
through multiple inheritance.
Interfaces NEVER change!
A “control” is just a COM
component with the right
interfaces.
GUID’s (or UUID’s)





Globally Unique Identifiers
(Universally Unique Identifiers)
Needed to avoid name collisions
A class is associated with a GUID
(CLSID).
An interface is associated with a
GUID (IID).
The Windows Registry: a
hierarchical database.
Execution Context



In proc - DLL’s (no marshalling)
Out of proc - EXE’s (LRPC)
Remote - EXE’s using DCOM
 RPC
 DCE
“compatible” (see
“Interconnecting Personal
Computers with the Distributed
Computing Environment” by Jim
Ries, UMC Thesis, 1998.)
Coding Tools







C - Raw
C++ - Raw
C++ - ATL
C++ - MFC
Visual Basic
J++ (pseudo Java)
Binary standard ==> any language
COULD produce COM
components.
Platforms

Win32
 Windows
95 (DCOM as separate
download; included in OSR2)
 Windows NT 4.0
 Windows 98
 Windows 2000

Unix platforms (with some help)
Nuts and Bolts



CoInitialize()
CoCreateInstance()
IUnknown
 QueryInterface()
 AddRef()
 Release()

CoUninitialize()
Demonstration - IDL
[
object,
uuid(75D873CD-7B63-11D3-9D43-00C0F031CDDE),
helpstring("IServer Interface"),
pointer_default(unique)
]
interface IServer : IUnknown
{
HRESULT Hello([in, string] char * pszMessage);
};
Demonstration - Server Code
// Prototype
class CServer :
public IServer, public CComObjectRoot,
{
// . . . Some code omitted for brevity
public CComCoClass<CServer,&CLSID_Server>
// IServer
public:
HRESULT STDMETHODCALLTYPE Hello(unsigned char * pszMessage);
};
// Code
HRESULT STDMETHODCALLTYPE CServer::Hello(unsigned char * pszMessage)
{
char szBuf[256];
wsprintf(szBuf,"%s",pszMessage);
::MessageBox(0,szBuf,"Server",MB_OK);
return(S_OK);
}
Demonstration - Client Code
if (SUCCEEDED(
hr=CoCreateInstance(CLSID_Server,NULL,
CLSCTX_LOCAL_SERVER,
IID_IServer,(void **)&pServer)))
{
if (SUCCEEDED(hr=pServer->Hello((unsigned char *)"Hello from the client")))
MessageBox("Client: Server printed the message");
else
{
wsprintf(szBuffer,"Hello() method failed: 0x%lX.\n",hr);
MessageBox(szBuffer);
}
pServer->Release();
}
else
{
wsprintf(szBuffer,"Unable to create a server: 0x%lX.\n",hr);
MessageBox(szBuffer);
}
Distributed Scenario
Client
Proxy Object
"CoCreateI
nstance"
Security
Prov ider
Stub
DCE RPC
Security
Prov ider
Protocol Stack
OLE32
Component
DCE RPC
Protocol Stack
"CoCreateInstance"
(Remote)
Activation
SCM
SCM
DCOM networkprotocol

From “DCOM Architecture” a Microsoft white paper.
Demonstration

Run DCOM “Hello world” demo
here.
Additional Technologies

COM+
 MTS
- Microsoft Transaction Server
 MSMQ - Microsoft Message Queue
 Compiler supported IUnknown, etc.

ADS - Active Directory Service
 As
“distributed registry”
 As namespace abstraction

All Microsoft products are COM based:
 IIS
- Internet Information Server
 Exchange
 Internet Explorer
 Word, Excel, etc.
References









Microsoft DCOM page
IETF DCOM Standard Proposal
Inside OLE by Kraig Brockschmidt, Microsoft
Press, 1995.
Essential COM by Don Box, Addison Wesley,
1998.
Inside COM by Dale Rogerson, Microsoft Press,
1997.
Don Box homepage
ActiveX COM Control Programming by Sing Li
and Panos Economopoulos, Wrox Press, 1997.
COM-CORBA Interoperability by Geraghty, et. al.,
Prentice Hall, 1999.
Microsoft Developer Network