モジュール 2。 Windows-Based プログラムでの COM の使用

このシリーズのモジュール 1 では、ウィンドウを作成し、WM_PAINTWM_CLOSEなどのウィンドウ メッセージに応答する方法を示しました。 モジュール 2 では、コンポーネント オブジェクト モデル (COM) が導入されています。

COM は、再利用可能なソフトウェア コンポーネントを作成するための仕様です。 最新のWindows ベースのプログラムで使用する機能の多くは、次のような COM に依存しています。

  • グラフィックス (Direct2D)
  • テキスト (DirectWrite)
  • Windows シェル
  • リボン コントロール
  • UI アニメーション

(この一覧の一部のテクノロジでは、COM のサブセットを使用するため、"純粋な" COM ではありません)。

COM には、学習が難しいという評判があります。 そして、COMをサポートする新しいソフトウェアモジュールを書くのは難しいかもしれません。 しかし、プログラムが厳密に COM の コンシューマー である場合は、COM が予想よりも理解しやすい場合があります。

このモジュールでは、プログラムで COM ベースの API を呼び出す方法を示します。 また、COM の設計の背後にある推論の一部についても説明します。 COM がそのまま設計されている理由を理解すれば、より効果的にプログラミングできます。 モジュールの 2 番目の部分では、COM に推奨されるプログラミングプラクティスについて説明します。

COM は、オブジェクト リンクと埋め込み (OLE) 2.0 をサポートするために 1993 年に導入されました。 COM と OLE は同じだと思われる場合があります。 これは、COM が学習するのが難しいという認識のもう 1 つの理由である可能性があります。 OLE 2.0 は COM 上に構築されていますが、COM を理解するために OLE を知る必要はありません。

COM は言語 標準ではなくバイナリ標準です。アプリケーションとソフトウェア コンポーネントの間のバイナリ インターフェイスを定義します。 バイナリ標準として、COM は言語に依存しませんが、特定の C++ コンストラクトに自然にマップされます。 このモジュールでは、COM の 3 つの主要な目標に焦点を当てます。

  • オブジェクトの実装をそのインターフェイスから分離する。
  • オブジェクトの有効期間の管理。
  • 実行時にオブジェクトの機能を検出する。

このセクションの内容

C++ でWindowsプログラムを作成する方法について学習する