// Unknown.h #define interface struct interface IUnknown { virtual HRESULT __stdcall QueryInterface( const IID & riid, void * *ppvObject) = 0; virtual ULONG __stdcall AddRef(void) = 0; virtual ULONG __stdcall Release(void) = 0; };
- IUnknown
- すべてのCOMインターフェースの共通の派生元
- すべてのインターフェースに知られてる
唯一のインターフェースなのにUnknown(未知) - インターフェースなのでそれぞれの関数は自分で実装する。
- HRESULT QueryInterface(const IID & riid,void **ppvObject)
- IID(インターフェースID)を指定して
対応するインターフェースへのポインタをppvに取得 - HRESULT ハンドルではない32bit値
16bitごとに意味が異なるので成否のチェックはマクロで行う(SUCCEEDED,FAILED) - IIDはヘッダファイルで定義
- 多重継承の場合IUnknownは常に同じアドレスを返す必要がある。
- IUnknownのアドレスを比較することで同じコンポーネントかどうかを調べることが可能
- IID(インターフェースID)を指定して
- ULONG AddRef(void)
- 参照カウントを+1
- ULONG Release(void)
- 参照カウントを-1
- 0 になったら解放