SCM

SCM

, SCM ( , , ). . 3.2, 1. . .

, SCM API- CoGetClassObject. SCM :

 HRESULT CoGetClassObject(   [in] REFCLSID rclsid,    // which class object?                            //      ?    [in] DWORD dwClsCtx,     // locality?                            // ?   [in] COSERVERINFO *pcsi, // host/security info                             //               [in] REFIID riid,        // which interface?                            //    ?   [out, iid_is(riid)] void **ppv); // put it here!                                     //      ! 

 . 3.2.

CoGetClassObject , . , , IID, , . , , .

CoGetClassObject (bitmask), ( , , ). CLSCTX:

 enum tagCLSCTX {   CLSCTX_INPROC_SERVER  = 0 1, // run -inprocess                                //          CLSCTX_INPROC_HANDLER = 0 2, // see note2                                //    2   CLSCTX_LOCAL_SERVER   = 0 4, // run out-of-process                                //          CLSCTX_REMOTE_SERVER  = 0 10 // run off-host                                //      -   } CLSCTX; 

(bit-wise-ORed together), , CLSCTX, ( , , , ). SDK , CLSCTX, :

 #define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | \                         CLSCTX_INPROC_HANDLER) #define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | \                        CLSCTX_LOCAL_SERVER | \                        CLSCTX_REMOTE_SERVER)  #define CLSCTX_ALL    (CLSCTX_INPROC_SERVER | \                        CLSCTX_INPROC_HANDLER | \                        CLSCTX_LOCAL_SERVER | \                        CLSCTX_REMOTE_SERVER) 

, , Visual Basic Java, CLSCTX_ALL, , .

CoGetClassObject , . COSERVERINFO , , , :

 typedef struct _COSERVERINFO {    DWORD       dwReserved1; // reserved, must be zero                            //  ,          LPWSTR      pwszName;    // desired host name, or null                            //      -         COAUTHINFO *pAuthInfo;   // desired security settings                            //          DWORD       dwReserved2; // reserved, must be zero                            //  ,      } COSERVERINFO; 

(host name), CLSCTX_REMOTE_SERVER, , , CLSID. , , . CoGetClassObject, COSERVERINFO.

CoGetClassObject, SCM :

 HRESULT GetGorillaClass(IApeClass * &rpgc)  {     // declare the CLSID for Gorilla as a GUID      //   CLSID   Gorilla   GUID    const CLSID CLSID_Gorilla = { 0x571F1680, 0xCC83, 0x11d0,         { 0x8C, 0 48, 0 00, 0 80, 0x 7, 0 39, 0x25, 0xBA } };     // call CoGetClassObject directly      //     CoGetClassObject    return CoGetClassObject(CLSID_Gorilla, CLSCTX_ALL, 0,       IID_IApeClass, (void**)&rpgc); } 

, , DLL , 3. CoGetClassObject , SCM . , , .

, IApeClass , . :

 HRESULT FindAGorillaAndEatBanana(long nGorillaID) {     IApeClass *pgc = 0;       // find the class object via CoGetClassObject        //           CoGetClassObject      HRESULT hr = CoGetClassObject(CLSID_Gorilla, CLSCTX_ALL,                                   0, IID_IApeClass, (void**)&pgc);     if (SUCCEEDED(hr)) {          IApe *pApe = 0;           // use the class object to find an existing gorilla            //                        hr = pgc->GetApe(nGorillaID, &pApe);         if (SUCCEEDED(hr)) {               // tell the designated gorilla to eat a banana                //                        hr = pApe->EatBanana();             pApe->Release();         }          pgc->Release();     }      return hr; } 

, Gorilla . , , - - . , :

 HRESULT CreateAGorillaAndEatBanana(void)  {      IApeClass *pgc = 0;       // find the class object via CoGetClassObject        //           CoGetClassObject      HRESULT hr = CoGetClassObject(CLSID_Gorilla, CLSCTX_ALL,                                   0, IID_IApeClass, (void**)&pgc);     if (SUCCEEDED(hr)) {          IApe *pApe = 0;           // use the class object to create a new gorilla            //                      hr = pgc->CreateApe(&pApe);         if (SUCCEEDED(hr)) {               // tell the new gorilla to eat a banana                //                      hr = pApe->EatBanana();             pApe->Release();         }          pgc->Release();     }     return hr; } 

, IApeClass, . , , .


1 , (wire-protocol) .

2 (in-process handlers) OLE. , , . OLE IPC (interprocess communication ) . , OLE. Windows NT 5.0 , , , .

3 .



Suschnost' tehnologii SOM
Essential COM
ISBN: 0201634465
EAN: 2147483647
Year: N/A
Pages: 103
Authors: Don Box

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net