VBで作成したCOMから、文字列を取得するには?

[戻る]
たけ 2004/11/17(水) 20:36:34
たけです。

いつもお世話になっております。

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

たけ 2004/11/18(木) 10:55:13
[[解決]]
自己解決しました。
以下でOKでした。

CComBSTR in = "hogehoge";
CComBSTR out;
xxx->getHoge(in.m_str, &(out.m_str));

RAPT 2004/11/19(金) 23:20:58
CComBSTRは、operator BSTR() をインプリメントしているので、
xxx->getHoge(in, &out);
で充分かと。

RAPT 2004/11/19(金) 23:22:24
AtlBase.hから実装を引っ張ってきた。

operator BSTR() const
{
    return m_str;
}
BSTR* operator&()
{
    return &m_str;
}

たけ 2004/11/22(月) 10:44:11
なんと↓であっさりとOKでした。
xxx->getHoge(in, &out);

わざわざありがとうございました。

古いスレッドには追加発言できません。