メソッドの変更

  引数の追加



「メソッドの実装とテスト」で作成した MsgBox メソッドは引数が一つです。これに引数をもう一つ追加
して、タイトル文字列も指定できるようにします

その為には既存の定義を変更する必要がありますが、3箇所の変更が必要です



  MyCom.idl の変更



以下のように変更します

  
	interface IMyAPI : IDispatch
	{
		[id(1), helpstring("メソッド MsgBox")] HRESULT MsgBox(
			[in] BSTR Message,
			[in] BSTR Title
		);
	};
  



  MyAPI.h の変更

以下のように変更します

  
public:
	STDMETHOD(MsgBox)(
		BSTR Message,
		BSTR Title
	);
  



  MyAPI.cpp の変更

以下のように変更します

  
STDMETHODIMP CMyAPI::MsgBox(
	BSTR Message,
	BSTR Title
)
{
	_bstr_t bstr;
	_bstr_t bstr2;

	bstr.operator = (Message);
	bstr2.operator = (Title);
	::MessageBox( NULL, (LPTSTR)bstr, (LPTSTR)bstr2, MB_OK );

	return S_OK;
}
  



  実行テスト

実行テストは WSH を使用するのが一番簡単です。「MyCom.vbs」を変更して、以下の内容をコピーして
エクスプローラでダブルクリックして下さい

  
Set obj = CreateObject("MyCom.MyAPI")
Call obj.MsgBox("こんにちは !", "タイトルの表示" )
  

VB の仕様として、引数が二つ以上のメソッドを () で引数を囲って 単純に呼び出す場合は Call が必要になります
戻り値が無いのであれば以下のように書く事もできます

  
Set obj = CreateObject("MyCom.MyAPI")
obj.MsgBox "こんにちは !", "タイトルの表示"
  



  タイトル引数を省略可能にするには

引数の型を VARIANT にして 記述方法を変更します

MyCom.idl
  
	interface IMyAPI : IDispatch
	{
		[id(1), helpstring("メソッド MsgBox")] HRESULT MsgBox(
			[in] BSTR Message,
			[in,optional] VARIANT Title
		);
	};
  

MyAPI.h
  
public:
	STDMETHOD(MsgBox)(
		BSTR Message,
		VARIANT Title
	);
  

MyAPI.cpp
  
STDMETHODIMP CMyAPI::MsgBox(
	BSTR Message,
	VARIANT Title
)
{
	// 引数省略チェック用
	_variant_t vtWork(Title);

	_bstr_t bstr(Message);
	_bstr_t bstr2;

	// タイトル引数チェック
	if ( vtWork.vt != VT_ERROR ) {
		bstr2.operator = (Title);
	}
	else {
		bstr2.operator = ("デフォルト文字列");
	}

	MessageBox( NULL, (LPTSTR)bstr, (LPTSTR)bstr2, MB_OK );

	return S_OK;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ