COM オブジェクトの生成方法
C++, COM
本記事の前提条件は以下の通りです。
- 初心者向け
- とは言っても、何らかのプログラムはそれなりに書けるけど、C とか C++ はちょっと、という人向け
- ざっくり概要しか説明しないので細かいことは気にしないでいただきたい
- Visual Studio 2013 くらい~
- Windowsプログラム (CUI, GUI)
- コードの検証
- 開発環境: Visual Studio 2022, x64, Release ビルド
- 実行環境: Windows 10
- 本記事は上から順番に読む前提となっている
- 「Visual Studio 2013 くらい~」と書いてあるが、本記事の内容だと現在過去未来のどのバージョンでもほぼ同じ
前提知識として必要と思われる情報
COM オブジェクト利用時の流れ
簡潔にするために、STA モデルの COM サーバーをシングルスレッドのプログラムから呼び出すだけの場合を考えるものとするのでご了承いただきたい。
COM システムの初期化
CoInitialize
(または CoInitializeEx
)を呼び出して COM システムを初期化しておく必要がある。
なお、COM システムを使い終わったら CoUninitialize
で各種リソースを解放する必要がある。
c++
CoInitialize(NULL);
// COM の利用
CoUninitialize();
COM オブジェクトの生成
CoCreateInstance
で COM オブジェクトを作成する。ポイントは引数で渡す COM コンポーネントの CLSID と、取得するインターフェースの IID である。
c++
CoInitialize(NULL);
{
IHogehogePtr p;
CoCreateInstance(CLSID_Hoge,
NULL,
CLSCTX_INPROC_SERVER,
IID_Fuga,
(void**)&p);
p->Hoge();
p->Fuga();
}
CoUninitialize();
CLSID から COM オブジェクトを生成する仕組みは下記参照。
CLSID_Xxx
、IID_Xxx
という識別子を利用するには、#import
でタイプライブラリをインポートする際、named_guids
オプションが必要なので注意。
以上。