COMを使う(超簡単例:VCで実行)

概要

 ここでは前項で作成したCOMをVC++で使う方法について 述べる。

 なお前項で作成したCOMはメソッドを1つのみ持ち、その メソッドは1つの文字列をパラメータとして受け取りメッセージボックスに表示するだけの簡単なも のだ。



COMを使う

 VC++で
1.「ファイル」メニューから「新規作成」にある「プロジェクト」を選択する
2.「Win32プロジェクト」を選択してプロジェクト名を「tttClient」にして「OK」ボタンを押す
3.プロジェクトウイザードが起動したら「アプリケーションの設定」画面を開く
4.「コンソールアプリケーション」を選択する
5.サポートの追加で「ATL」にチェックを入れる
6.「完了」ボタンを押す
7.tttClient.cppを以下のように変更する(太字部分を追加)


// tttClient.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

#import "progid:ttt.aaa.1" no_namespace, named_guids

int _tmain(int argc, _TCHAR* argv[])
{
	::CoInitialize(NULL);

	CComPtr	aaa;

	aaa.CoCreateInstance(CLSID_Caaa);
	aaa->eee(L"あいう");
	aaa = NULL;

	::CoUninitialize();

	return 0;
}

8.「ビルド」メニューから「ソリューションのビルド」を選択する

 以上の操作によってビルドが正常に終了すればできあがりです。最後に「デバッグ」メニューの 「開始」を選択して実行します。すると「あいう」と表示されたメッセージボックスが開きます。

 メッセージボックスに表示された「あいう」という文字列はCOMを使う側から渡されたものなの で該当箇所を変更すれば表示されるメッセージも変わります。



解説\

#import "progid:ttt.aaa.1" no_namespace, named_guids
 これは使いたいCOMの前宣言。includeみたいなものだと思って差し支えない。
 これを宣言することによってソースコード中で「Iaaa」や「CLSID_Caaa」が使用可能になっている。

 特に重要なのは「ttt.aaa.1」という部分。この部分によって使いたいCOMオブジェクトを指定している。


	::CoInitialize(NULL);

	::CoUninitialize();
 これはCOMを使うための前宣言と後宣言。これがないとCOMを使うことができない。特殊な場合を除き 一回実行すればOKなため、アプリケーションの実行時にCoInitializeを、終了時にCoUninitializeを呼 べばいい。


	CComPtr	aaa;

	aaa.CoCreateInstance(CLSID_Caaa);
	aaa = NULL;
 COMオブジェクトの作成と開放。COMの作成はCoCreateInstance()で行い、開放はNULLを代入する。

※NULLを代入して開放できるのはCComPtrを使っているため。CComPtrを使っていない場合はRelease() を使う


	aaa->eee(L"あいう");
 メソッドの呼び出し。eeeの引数はBSTR型のため、正式には
	aaa->eee(CComBSTR(L"あいう"));

	BSTR		bstr;
	CAtlString str;
	str = _T("あいう");
	bstr = str.AllocSysString();
	aaa->eee(bstr);
	::SysFreeString(bstr);
のようにする必要がある。しかしこの場合はBSTRを使わなくても特に問題がないためこのようにした。

カテゴリー「VC++ TIPS」 のエントリー