COMメモ6 IUnknown

// 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のアドレスを比較することで同じコンポーネントかどうかを調べることが可能
    • ULONG AddRef(void)
      • 参照カウントを+1
    • ULONG Release(void)
      • 参照カウントを-1
      • 0 になったら解放
広告

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: その他, C++, COM タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中