IUnknown

IUnknown

- IUnknown , IExtensibleObject, . IExtensibleObject, , :

 class IExtensibleObject {   public:      virtual void *Dynamic_Cast(const char* pszType) = 0;      virtual void DuplicatePointer(void) = 0;      virtual void DestroyPointer(void) = 0;  }  

Dynamic_Cast, C++ dynamic_cast. , , DuplicatePointer. , , DestroyPointer. IUnknown C++:

 extern " " const IID IID_IUnknown:  interface IUnknown {      virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv) = 0;      virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;     virtual ULONG STDMETHODCALLTYPE Release(void) = 0;  };  

SDK interface C++ struct, . , , , , public . - , STDMETHODCALLTYPE. Win32, Microsoft C++ _stdcall.

IUnknown IExtensibleObject. QueryInterface ++- dynamic_cast. AddRef , . Release , , , . IUnknown , , , IUnknown GUID, .

IDL- IUnknown unknwn.idl SDK, :

 // unknwn.idl - system IDL file  // unknwn.idl -     IDL  [    local,    object,    uuid (00000000-0000-0000-C000-000000000046)  ]  interface IUnknown {    HRESULT QueryInterface([in] REFIID riid, [out] void **ppv);   ULONG AddRef(void);   ULONG Release(void);  }  

local . , , HRESULT. , IUnknown . , , IDL- , SDK, , . , . SDK.

IUnknown - . IUnknown , . IUnknown - , , , IUnknown, - . , vtbl, : QueryInterface, AddRef Release. vtbl, .

IDL, IDL- , import, IDL- :

 // calculator.idl  [object, uuid(BDA4A270-A1BA-11dO-8C2C-0080C73925BA)]  interface ICalculator : IUnknown {    import "unknwn.idl";    // bring in def. of IUnknown    //     IUnknown    HRESULT Clear(void);    HRESULT Add([in] long n);    HRESULT Sum([out, retval] long *pn); }  

import , , . import , IDL- . C/C++ / ++- IDL- , , import IDL- #include / ++- :

 // calculator.h - generated by MIDL  // calculator.h -   MIDL  // bring in def. of IUnknown  //     IUnknown  #include "unknwn.h"  extern "C" const IID IID_ICalculator;  interface ICalculator : public IUnknown {      virtual HRESULT STDMETHODCALLTYPE Clear(void) = 0;      virtual HRESULT STDMETHODCALLTYPE Add(long n) = 0;      virtual HRESULT STDMETHODCALLTYPE Sum(long *pn) = 0;  }  

MIDL - , GUID, IDL- :

 // calculator_i.  - generated by MIDL  const IID IID_ICalculator =  { 0xBDA4A270, 0xA1BA, 0x11d0, { 0x8C, 0x2C,    0x00, 0 80, 0 C7, 0 39, 0x25, 0xBA } };  

, , calculator_i.c (makefile), calculator_i.c C++ . , IID_ICalculator 128- .

, IUnknown. IDL :

 import "unknwn.idl";  [object, uuid(DF12E151-A29A-11d0-8C2D-0080C73925BA)]  interface IAnimal : IUnknown {      HRESULT Eat(void);  }  [object, uuid(DF12E152-A29A-11d0-8C2D-0080C73925BA)]  interface ICat : IAnimal {      HRESULT IgnoreMaster(void);  }  [object, uuid(DF12E153-A29A-11d0-8C2D-0080C73925BA)]  interface IDog : IAnimal {     HRESULT Bark(void);  }  [object, uuid(DF12E154-A29A-11d0-8C2D-0080C73925BA)]  interface IPug : IDog {     HRESULT Snore(void);  }  [object, uuid(DF12E155-A29A-11d0-8C2D-0080C73925BA)]  interface IOldPug : IPug {     HRESULT SnoreLoudly(void);  }  

: . :

 [object, uuid(DF12E156-A29A-11d0-8C2D-0080C73925BA)]  interface ICatDog : ICat, IDog {    // illegal, multiple bases    //  ,            HRESULT Meowbark(void);  }  

. , C++ . , . DCE RPC. DCE RPC . , , , . , Cat/Dog - :

 class CatDog : public ICat, public IDog {    // ...  };  

, Cat/Dog, QueryInterface . QueryInterface , Cat/Dog , . , .

, , . , .

 . 2.4.

2.4 CatDog. , : , CatDog : ICat, IDog, IAnimal IUnknown.



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