charからBSTRに変換


みっみ  2004-05-20 03:12:56  No: 53709

charからBSTRに変換したいんですがどうすればいいでしょうか?
CからVBのコム呼び出しするさいにstring宣言の引数に
値を渡すのに困っています。


たく  URL  2004-05-20 03:55:09  No: 53710

_bstr_t
COMDEF.H で宣言されるコンパイラ COM サポート クラスの 1 つです。
BSTR 型を包み込んで、便利な演算子とメソッドを提供します。

_bstr_t::_bstr_t( const char* s2 ) throw( _com_error );

だそうです


RAPT  2004-05-20 08:58:07  No: 53711

WTLなら、CComBSTRクラスがあります。


たく  URL  2004-05-20 19:11:33  No: 53712

MFCならCString::AllocSysString ですしね^^


みっみ  2004-05-20 20:00:16  No: 53713

_bstr_tは調べた限りではどういう風に使ったらいいのかわかりません。
MSDNを見ても意味不明でした。実際にどういうソースを書いていいかもわかりません。

CComBSTRは
char a;
CComBSTR( sizeof( a) ,a);

でいいんでしょうか?
使い終わった後の開放など入らないんでしょうか?
Emptyというメソッドがありますが・・・
アタッチ、デタッチするメソッドもありますが
PC用語のアタッチ、デタッチとはどういう意味なんでしょうか?


たく  URL  2004-05-20 22:03:13  No: 53714

char buf[64];
sprintf(buf, "abcdefg");

_bstr_t a(buf);
VB_Func(a);

とか?


みっみ  2004-05-20 23:16:08  No: 53715

とりあえずCComBSTRでやろうとおもうんですが

char a[64];
BSTR b;
wsprintf(a,"あいうえお");
b = CComBSTR( sizeof( a) ,a);

動き的には問題なかったのですが
これでいいんでしょうか?
クラス内のコンストラクタデストラクタでBSTRの確保、解放がされているという認識で使っていますが大丈夫なんでしょうか?


RAPT  2004-05-21 07:55:42  No: 53716

WTLならヘッダファイルしかない(ヘッダファイルに定義)ので、
ヘッダファイルを確認すればいいことでしょう。

少なくともWTL7.0では、初期化子つきのコンストラクタでインスタンスを
作成し、デストラクタでインスタンスを破棄しています。

また、a が終端文字'\0' で終わっている場合、
CComBSTR spBstr("あいうえお");
BSTR bstr = spBstr;
で大丈夫ですが、

BSTR bstr = CComBSTR("あいうえお");
だと、WTL::CComBSTR::operator BSTR()は、内部ポインタのアドレスを返す
ので、bstrの指し示す先は上記行が終わる時に解放され、不定となります。


みっみ  2004-05-21 18:42:11  No: 53717

どうもありがとうございました。
試行錯誤してみます。

ところで・・・アタッチとデタッチはどういう意味なんでしょうか?


Toshi  2004-05-21 19:02:53  No: 53718

>ところで・・・アタッチとデタッチはどういう意味なんでしょうか?

その話の中でどう言う意味で使われているのかまでは知りませんが、
「一般的な話」として言うなら、アタッチとデタッチは言葉通り
「取り付け」「取り外し」です。

時にはアタッチによって何かが活性化したり、デタッチによって
非活性化する場合も有ります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加