com接口

1 interface IUnknown

2 {

3     virtual HRESULT __stdcall QueryInterface(const IID & iid, void ** ppv) = 0;

4     virtual ULONG _stdcall AddRef() = 0;

5     virtual ULONG _stdcall Release() = 0;

6 };

 

 1 void foo(IUnknown * pI)

 2 {

 3     IX * pIX = NULL;

 4     HRESULT hr = pI->QueryInterface(IID_IX, (void **)&pIX);

 5     if (SUCCEEDED(hr))

 6     {

 7         pIX->Fx();

 8     }

 9     else

10         ...

11 }

 

 1 HRESULT __stdcall CA::QueryInterface(const IID & iid, void ** ppv)

 2 {

 3     if (iid == IID_IUnknown)

 4         *ppv = static_cast<IUnknown *>this;

 5     else if (iid == IID_IX)

 6         *ppv = static_cast<IX *>this;

 7     else if (iid == IID_IY)

 8         *ppv = static_cast<IY *>this;

 9     else

10         *ppv = NULL;

11 

12     static_cast<IUnknown *>(*ppv)->AddRef();

13     return S_OK;

14 }

 

你可能感兴趣的:(com)