最終更新:2015-04-20 (月) 11:37:49 (3286d)  

COM
Top / COM

Component Object Model

Microsoftが提唱する、部品化されたプログラムを作成・利用するための基盤となる技術仕様。

概要

  • 特定の機能のみを持つプログラム部品を組み合わせる(公開されているインタフェースを介してCOMコンポーネントと通信)ことでアプリケーションソフトの開発が容易になる。

COMオブジェクト

インターフェイス

全てのCOMコンポーネントはIUnknownと呼ばれるインタフェースを継承する必要がある

COM/関数

メモ

  • COM関連の関数の戻り値の型は、ほとんどHRESULT

メモ2

  • DLLは簡単です。要は関数の塊です。
  • LoadLibraryでメモリに展開してGetProcAddressで使いたい関数のポインタを取得して使うだけです。
  • COMの場合は、関数ポインタではなくインターフェースを取得して使います。
  • インターフェースはCoCreateInstanceを使って取得します。

クラスID

COMコンポーネントにはクラスID (CLSID) が割り当てられ、COMコンポーネント同士はクラスIDによって区別される。CLSIDはGUIDで構成されている。各COMコンポーネントは1つ以上のインタフェースを公開することで機能を提供している。インタフェース同士はインタフェースID (IID?) で区別される。IID?GUIDで構成されている。

  • UUID: オブジェクトやインターフェースに一意なIDを与えるために使用される一般的な規格
    • GUID: UUIDのMicrosoft独自定義版。UUIDが2進数表記に対して16進数表記になっている
      • CLSID: GUIDの内、オブジェクトを指す場合の別名
      • IID?: GUIDの内、インターフェースを指す場合の別名

アパートメント

実行形態の種類

  • STAシングルスレッドアパートメント?
  • MTAマルチスレッドアパートメント?

関連

[連載! とことん VC++] 第 1 回 COM 再入門

参考