たけです。
いつもお世話になっております。
VBで作成したCOMから、文字列を取得したいのですが
呼び出すと落ちてしまいます。
問題のメソッドは、tlhファイルで見ると
以下のようなインタフェースです。
hogeを引数として渡して、hoge2に結果の文字列を返してもらいます。
virtual HRESULT __stdcall getHoge (
BSTR hoge,
BSTR * hoge2 ) = 0;
これに対して↓のように実行したところ、
getHoge()呼び出し時に落ちてしまいます。
文字列の受け取り方がまずいのでしょうか?
BSTR bstr = SysAllocStringLen(NULL, 100);
USES_CONVERSION;
xxx->getHoge(T2OLE(aaa), &bstr); (xxxは、COMインタフェースへのポインタ)
開発環境 VC6.0,VB6.0,Win2000
自己解決しました。
以下でOKでした。
CComBSTR in = hogehoge;
CComBSTR out;
xxx->getHoge(in.m_str, &(out.m_str));
CComBSTRは、operator BSTR() をインプリメントしているので、
xxx->getHoge(in, &out);
で充分かと。
AtlBase.hから実装を引っ張ってきた。
operator BSTR() const
{
return m_str;
}
BSTR* operator&()
{
return &m_str;
}
なんと↓であっさりとOKでした。
xxx->getHoge(in, &out);
わざわざありがとうございました。