|
以下のように変更します
|
interface IMyAPI : IDispatch
{
[id(1), helpstring("メソッド MsgBox")] HRESULT MsgBox(
[in] BSTR Message,
[in] BSTR Title
);
};
| |
|
|
|
以下のように変更します
|
public:
STDMETHOD(MsgBox)(
BSTR Message,
BSTR Title
);
| |
|
|
|
以下のように変更します
|
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;
}
| |
|
|
|