IUnknown

IUnknown

DuplicatePointer DestroyPointer , AddRef Release IUnknown , , . , . AddRef/Release , , .

(Component Object Model Specification) . - C++. :

  1. , AddRef .
  2. , , Release, , .
  3. AddRef Release , .

, ( , ). , AddRef Release, . , , 8500 14.4 / , .

, , , AddRef Release. , AddRef:

  • 1. .
  • 2. [out] [in, out] .
  • A3. (physical result) .
  • 4. .
  • , Release:

  • R1. .
  • R2. .
  • R3. [in,out] , . , [out] .
  • R4. .
  • R5. , .
  • , , [in]:

  • S1. [in]- , AddRef Release, , , .
  • , , .

    , , , :

      void GetObject([out] IUnknown **ppUnk);  

    , :

      void UseObject([in] IUnknown *pUnk);  

    , . , , :

     void GetAndUse(/* [out] */ IUnknown ** ppUnkOut)  {      IUnknown *pUnk1 = 0, *pUnk2 = 0;      *ppUnkOut =0;                                      // R3        // get pointers to one (or two) objects        //         (   )        GetObject(&pUnk1);                               //A2      GetObject(&pUnk2);                               //A1         // set pUnk2 to point to first object        //   pUnk2,                if (pUnk2) pUnk2->Release():                          //R1     if (pUnk2 = pUnk1) pUnk2->AddRef():                   //A1       // pass pUnk2 to some other function        //   pUnk2  -              UseObject(pUnk2);                                   //S1       // return pUnk2 to caller using ppUnkOut parameter        //   pUnk2    ,          //   ppUnkOut      if (*ppUnkOut = pUnk2) (*ppUnkOut)->AddRef();     // A2        // falling out of scope so clean up        //                    if (pUnk1) pUnkl->Release();                         //R2      if (pUnk2) pUnk2->Release();                         //R2  }  

    , A2 , . GetObject , GetObject . , GetObject AddRef [out]. , ppUnkOut, AddRef .

    AddRef Release, . AddRef, Release 32- . AddRef Release. , , , , , , .

    , , Release . Release , . . , Release , , . , Release , AddRef, . , , , , , . (released) , , , Release:

     inline void SafeRelease(IUnknown * &rpUnk)  {      if (rpUnk) {          rpUnk->Release();          rpUnk = 0;        // rpUnk passed by reference        // rpUnk,          }  }  

    , . , , .

    , AddRef Release, . GetAndUse, , . , , , . , return , , (unhandled) C++, , , . , , , C++. , , , . - , Release .



    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