概要
ここでは前項で作成した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を呼 べばいい。
CComPtrCOMオブジェクトの作成と開放。COMの作成はCoCreateInstance()で行い、開放はNULLを代入する。aaa; aaa.CoCreateInstance(CLSID_Caaa); aaa = 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を使わなくても特に問題がないためこのようにした。






