Title: DCOM(Distributed COM)
1DCOM(Distributed COM)
- Presenter
- ???? R89725009 ???
- ???? R89725037 ???
2??
- Component Object Model
- Distributed COM
- DCOM Example With MFC
- SAP
- DCOM Component Connector
3Component Object Model
- COM ???????????????
- COM?????
- ??COM?????????????
- COM?????
- COM??????????????API
- ?????????????
- ?????
- ???? (in-process server)
- ???? (out-of-process server, local server)
- ???? (remote server)
4COM ?????
- ???? Componentware
- COM ???
- ????????????????
- ?????
- ?????
5COM??
- ???????????????????
- ??COM??????????
- ??????IID(Interface ID)
- ???IUnknown??
- ??????,??????
- ?????????
- ????????
6IUnknown??
- QueryInterface
- ??????????????
- AddRef?Release
- ???????????,?????(Reference Count)???0?,???????
????????????,????????,
7COM?????
- ???????????????????
- ??????????????,????
- ???????
- -???(In Process)
- -??(Local)
- -?? (Remote)
8???(In-Process)
- ?????????????????,?????????
9???(In-Process)
- In-Process ServerDLL??
- ???,?DLL???????
- ??????
- ??????Process,??????
10??(Local)
- ??????????????????,????????????????
11??(Local)
- ????? EXE ??
- ????,????????
- Proxy-gt Marshaling-gtIPC (inter-process
communication)-gtUn-marshaling-gtStub - ????? In-Process Server ?
12??(Remote)
13??(Remote)
- Client?? Server ?????????proxy/stub ?? marshaling
- RPC(Remote Procedure Call) ??
- Server??? DLL ??? EXE ??
- (?? DLL,??? Server ?????,
- ??? dllhost.exe)
14COM?????(COM Library)
- COM????????COM?????
- ??COM????????????????DLL??,??DLL????COM????????
?? - -???API??
- -??????
- -??????????
- -????????
15??????(Interface Definition Language)
- ???????????
- MIDL(Microsoft IDL???)
- Proxy/Stub DLL
- Proxy?stub??????proxy/stub DLL?,??DLL?????proxy
????stub???? ???????????????????,????proxy/stub
DLL????????????? ?
16COM?????????
17COM?????????
18??Visual Basic?? Excel
Dim obj Set obj CreateObject(Excel.Application
) obj.visible true obj.Workbooks.Add obj.Range(
"B3").Select obj.ActiveCell.FormulaR1C1
"12" obj.Range("B4").Select obj.ActiveCell.Formula
R1C1 "34
19COM ???? Excel ????
- ?? RegEdit.exe ?????
- HKEY_CLASSES_ROOT CLSID 00024500-0000-000
LocalServer32 excel.exe - Excel.Application CLSID
00024500-0000-000 - Excel.Application ProgID
20COM Runtime
???????
COM Runtime
????(Monikers, Storage, Data Transfer,...)
DCOM
Registry
Pluggable Security(SSPI)
MS-RPC
NTLM
Pluggable Transports
DCE
Kerberos
ETC...
TCP
UDP
IPX
Tunneled TCP
ETC...
21Core COM Services
- Security
- Lifecycle Management
- Type Information (Interface Repository)
- Monikers (Naming)
- Automation (Dynamic Invocation)
- Data Transfer
- Component Categories
- Registry
22COM Runtime ArchitectureFlexible and extensible
Pluggable Transports
Server Machine
Client Machine
TCP, UDP
COMClient
SPX,IPX
COM Runtime
COM Runtime
Net BUI
HTTP
Falcon
Other Component
23COM Runtime ArchitectureFlexible and extensible
Pluggable Security Providers
Server Machine
Client Machine
NTLM
COMClient
SSL, Certs.
COM Runtime
COM Runtime
NT Kerberos
DCE
Other Component
24COM ??????
?????
?????
OLE32.DLL
Service Control manager (RPCSS.EXE)
25COM ??????
?????
?????
OLE32.DLL
Service Control manager (RPCSS.EXE)
26COM ??????
????
?????
?????
OLE32.DLL
OLE32.DLL
Service Control manager (RPCSS.EXE)
27COM ??????
????
?????
?????
OLE32.DLL
OLE32.DLL
Service Control manager (RPCSS.EXE)
28COM ??????
????
?????
?????
COM ?????
OLE32.DLL
OLE32.DLL
Service Control manager (RPCSS.EXE)
29Distributed COM
- Just COM with a longer wire
- All COM components communicate in the same way
- on the same machine
- In-process, Out-of-process
- across a Local Area Network
- across a Wide Area Network
- across the Internet
- Same tools, knowledge, code
30Distributed COM
- Wire Protocol
- Based on DCE RPC Specification
- Interoperable with OSF DCE RPC implementations
- We call it ORPC
- ???????????
- CreateObject(ProgID, Jacky)
- DCOMCNFG.EXE
31COM???????????????
- ?? RegEdit.exe!
- HKEY_CLASSES_ROOT
- AppID
- 00024500-0000-000
- RemoteServerName jacky
32DCOM ?????
????
?????
?????
OLE32.DLL
OLE32.DLL
SCM
SCM
33COM???????
- ????
- ???????????????
- (registry)???
- ??????????????????
- ???????
- ????(default security)???????????????????
- ????(component security)????????????????
34To implement a class using MFCs interface maps
follows these steps
Implementation With MFC(1)
- 1.Use Derive a class either directly or
indirectly from - CCmdTarget.
- Â 2.Use the DECLARE_INTERFACE_MAP function
in - the derived class definition.
- 3.For each interface you wish to support,
use the - BEGIN_INTERFACE_PART?
- END_INTERFACE_PART
- macros in the class definition.
35Implementation With MFC(2)
4.In the implementation file, use the
BEGIN_INTERFACE_MAP and END_INTERFACE_MAP
macros to define the class's interface
map. 5.For each IID supported, use the
INTERFACE_PART macro between the
BEGIN_INTERFACE_MAP and END_INTERFACE_MAP
macros to map that IID to a specific "part"
of your class.
36Implementation With MFC(3)
6.Implement each of the nested classes that
represent the interfaces you support.
7.Use the METHOD_PROLOGUE macro to access the
parent, CcmdTarget-derived object.
8.AddRef, Release, and QueryInterface can
delegate to the CcmdTarget implementation
of these functions ExternalAddRef,
ExternalRelease, and ExternalQueryInterfac
e.
37Macro of MFC Implementation(1)
- BEGIN_INTERFACE_PART(localClass, iface)
- END_INTERFACE_PART(localClass)
-
- localClass?? interface ? class
- ifaceclass ??? interface
- ????????,???X??????????,????????
-
38Macro of MFC Implementation(2)
- DECLARE_INTERFACE_MAP
- ?????????,????????????????
-
- BEGIN_INTERFACE_MAP(theClass, baseClass)
- END_INTERFACE_MAP
- theClass ??? interface ? class
- baseClass? class??????
-
- ?implement?,???? interface map?
39Macro of MFC Implementation(3)
- STDMETHOD_
- ?????(.h file)?,??method?
- STDMETHODIMP_
- ?implement?(.cpp),??method?
- ?????????????????
40Macro of MFC Implementation(4)
- STDMETHOD
- ?????(.h file)?,??method?
- STDMETHODIMP
- ?implement?(.cpp),??method?
- ?????????HRESULT?????
- METHOD_PROLOGUE
- ????????,???pThis??????
41CLASS FACTORY(1)
- A COM object that implements the IClassFactory
interface and that creates one or more instances
of an object?
42CLASS FACTORY(2)
- IClassFactory??
- ???IUnknow??,??member function
- ?
- virtual BOOL CreateInstance(int nlid,
- void ppvObj)
- 0
43CLASS FACTORY(3)
- Why Class Factory ?
-
- ??????call target class?constructor,?object??????
???Class Factory - ???
44???? Interface.h
- struct Isum public IUnknown
-
- STDMETHOD_(void, Sum) (int x,int y,
- int revtal) 0
-
45 ?CcmdTarget??derived??? ???? test.h
- class CTest public CCmdTarget
- ???
- protected
- ???
- BEGIN_INTERFACE_PART(Sum, ISum)
- STDMETHOD_(void, Sum) (int x,int y,int
revtal) - END_INTERFACE_PART(Sum)
- DECLARE_INTERFACE_MAP()
46??implement test.cpp(1)
- include "Interface.h"
- include "test.h
- ???
- static const IID IID_ISum
- 0x692d03a4, 0xc689, 0x11ce,
- 0xb3, 0x37, 0x88, 0xea, 0x36, 0xde, 0x9e,
0x4e - BEGIN_INTERFACE_MAP(CTest, CCmdTarget)
- INTERFACE_PART(CTest, IID_ISum, Sum)
- END_INTERFACE_MAP()
47??implement test.cpp(2)
- STDMETHODIMP_(ULONG) CTestXSumAddRef()
-
- METHOD_PROLOGUE(CTest, Sum)
- return pThis-gtExternalAddRef()
-
- STDMETHODIMP_(ULONG) CTestXSumRelease()
-
- METHOD_PROLOGUE(CTest, Sum)
- return pThis-gtExternalRelease()
48??implement test.cpp(3)
- STDMETHODIMP CTestXSumQueryInterface(
- REFIID iid, LPVOID ppvObj)
-
- METHOD_PROLOGUE(CTest, Sum)
- return pThis-gtExternalQueryInterface(iid,
ppvObj) -
- Â STDMETHODIMP_(void) CTestXSumSum(int x,int
y,int revtal) -
- revtalxy
- return
49?????(1)
- LPCLASSFACTORY pClf
- LPUNKNOWN pUnk
- ISum pSum
- Imultilpy pMul
- HRESULT hr
- CLSID clsid
- Â
- if ((hr CLSIDFromProgID(L"Test", clsid))
! NOERROR) - return
50?????(2)
- if((hrCoGetClassObject(clsid,CLSCTX_REMOTE_SERV
ER, NULL, IID_IClassFactory, (void ) pClf)) !
NOERROR) -
- return
-
- Â
- pClf-gtCreateInstance(NULL, IID_IUnknown, (void)
pUnk) - pUnk-gtQueryInterface(IID_ISum, (void) pSum)
51?????(3)
- int sum
- pSum-gtSum(4,5,sum)
- Â
- pClf-gtRelease()
- pUnk-gtRelease()
- pSum-gtRelease()
52 - DCOM Component Connector
- ?SAP?Microsoft????DCOM???????,????SAP?????
????components?????????????????????,?????????????
?(component),?????????????
53- ??DCOM Component Connector???(1)
-
- A new dimension of openness
- ??????? interface ?????????
- Leverage existing programming skills
- ?????????SAP tools?COM tools???
- ??
-
54- ??DCOM Component Connector???(1)
- Eased integration
- ?????DCOM,????????????
- ???????????DataBases
- Evolutionary approach
- ??????scalability,??????????
- ???????
55- ????
- SAP??DCOM Component Connector ???Business
Framework,????component-based?integrated?open
application software solution????SAP???collaborati
ve e-business??mySAP.com ???Business
Framework???????? -
56