0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[初級] C++: COMコンポーネントの使い方(COMオブジェクト生成)

Last updated at Posted at 2024-09-22

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_XxxIID_Xxx という識別子を利用するには、#import でタイプライブラリをインポートする際、named_guids オプションが必要なので注意。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?