IUnknown とは? ~ 作ってわかる COM の基礎

ここでは単純な COM コンポーネントを作成することによって、COM とは何か? COM コンポーネントには最低でも何が必要かを理解しましょう。

ゼロから COM コンポーネントを作ろう!

ここで作る COM コンポーネントは?

ここでは現実世界の「車」をイメージしたコンポーネントを作ります。

そこで、 Car という名前の COM コンポーネントを作ります。クラス名は Car とします。

Car コンポーネントには、Run メソッドおよび Stop メソッドの二つを持つ ICar インターフェイスを持たせることにします。 COM プログラミングではインターフェイスの接頭辞として I (アルファベットの大文字の I) が付けられるのが普通です。

IUnknown インターフェイスの実装は必須

Car を COM コンポーネントと呼ぶためには、自分で定義する ICar インターフェイスの他に COM コンポーネントとしての最低条件として IUnknown インターフェイスを持たせなければいけません

IUnknown インターフェイスは、次のメソッドから成ります。

メソッド名説明
QueryInterfaceCOM コンポーネントに特定のインターフェイスを実装しているかどうか問い合わせることを可能とします。 書籍や資料などで省略するときは QI などと略されることがあります。
AddRefCOM コンポーネントの寿命管理に利用されます。このメソッドで COM コンポーネントの参照カウンタがインクリメントされます。
ReleaseCOM コンポーネントの寿命管理に利用されます。このメソッドで COM コンポーネントの参照カウンタがデクリメントされます。

表に書いたように IUnknown インターフェイスの QueryInterface メソッドを使うと、 「インターフェイスの問い合わせ」が可能になります。例えば、ある COM オブジェクトへのポインタを取得したときに、 「この COM オブジェクトって、XXX インターフェイスを実装してますか?」 という問い合わせができます。

QueryInterface メソッドはインターフェイスの切換え器のように使えます。

上で述べたように、IUnknown インターフェイスは全ての COM コンポーネントで実装しなければなりません。 逆にいえば、あるモジュールが COM コンポーネントであるならば、IUnknown インターフェイスは必ず実装されていることを想定して良いということを意味します。

Unknown (分らない) という名前に反して、IUnknown インターフェイスが一番確実に存在するというわけです。 その意味では、IUnknown ではなく IWellknown (よく知られている) なんて名前でもよさそうですけどね(笑) でも、この名前はもう決まっていて動かせません。

« 前の記事 次の記事 »
COM プログラミング入門 目次 COM の寿命管理

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説