COMのおさらい

C++のついでにCOMについてもおさらいします。

COMとは何か?

Component Object Modelの略。カプセル化とダイナミックリンクが特徴。言語依存せず、再利用性が高く、プロセス間通信が容易。必要なインターフェースは動的にクライアントから要求される。

interface

COMではインターフェースクラスを用いてインターフェースを記述する。インターフェースクラスはIUnknownを継承する。IUnknownには以下のメソッドが存在する。

QueryInterface

第一引数のIID型を用いて提供するインターフェースについて応答を行う。インターフェースが存在する場合には第二引数にインターフェースのポインタをセットし、S_OKを返却する。存在しない場合はE_NOINTERFACEを返却する。

AddRef

参照カウンタのインクリメントを行い、参照カウンタを返却する。ちなみにQueryInterfaceでも一度呼び出される

Release

参照カウンタのデクリメントと参照カウンタの返却を行う。参照カウンタが0以下の場合はコンポーネントの解放を行う

CreateInstance(*)

これはIUnknownのメソッドではないが、コンポーネントインスタンスをnewし、 QueryInterface関数の呼び出しを行う

参照元

ちなみに参照元はこちら。書きかけなのが残念ですが、大変勉強になりました。
COM研究室