VBで作成したCOMから、文字列を取得するには? – プログラミング – Home

VBで作成したCOMから、文字列を取得...
 
通知
すべてクリア

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


たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

たけです。

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

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


引用未解決
トピックタグ
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

自己解決しました。
以下でOKでした。

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

CComBSTRは、operator BSTR() をインプリメントしているので、
xxx->getHoge(in, &out);
で充分かと。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

AtlBase.hから実装を引っ張ってきた。

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


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

なんと↓であっさりとOKでした。
xxx->getHoge(in, &out);

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました