ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« ユニコードとMBCS(char、WCHAR) | メイン | COMプログラミングをはじめよう »

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を使わなくても特に問題がないためこのようにした。








Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報