charからBSTRに変換したいんですがどうすればいいでしょうか?
CからVBのコム呼び出しするさいにstring宣言の引数に
値を渡すのに困っています。
_bstr_t
COMDEF.H で宣言されるコンパイラ COM サポート クラスの 1 つです。
BSTR 型を包み込んで、便利な演算子とメソッドを提供します。
_bstr_t::_bstr_t( const char* s2 ) throw( _com_error );
だそうです
WTLなら、CComBSTRクラスがあります。
MFCならCString::AllocSysString ですしね^^
_bstr_tは調べた限りではどういう風に使ったらいいのかわかりません。
MSDNを見ても意味不明でした。実際にどういうソースを書いていいかもわかりません。
CComBSTRは
char a;
CComBSTR( sizeof( a) ,a);
でいいんでしょうか?
使い終わった後の開放など入らないんでしょうか?
Emptyというメソッドがありますが・・・
アタッチ、デタッチするメソッドもありますが
PC用語のアタッチ、デタッチとはどういう意味なんでしょうか?
char buf[64];
sprintf(buf, "abcdefg");
_bstr_t a(buf);
VB_Func(a);
とか?
とりあえずCComBSTRでやろうとおもうんですが
char a[64];
BSTR b;
wsprintf(a,"あいうえお");
b = CComBSTR( sizeof( a) ,a);
動き的には問題なかったのですが
これでいいんでしょうか?
クラス内のコンストラクタデストラクタでBSTRの確保、解放がされているという認識で使っていますが大丈夫なんでしょうか?
WTLならヘッダファイルしかない(ヘッダファイルに定義)ので、
ヘッダファイルを確認すればいいことでしょう。
少なくともWTL7.0では、初期化子つきのコンストラクタでインスタンスを
作成し、デストラクタでインスタンスを破棄しています。
また、a が終端文字'\0' で終わっている場合、
CComBSTR spBstr("あいうえお");
BSTR bstr = spBstr;
で大丈夫ですが、
BSTR bstr = CComBSTR("あいうえお");
だと、WTL::CComBSTR::operator BSTR()は、内部ポインタのアドレスを返す
ので、bstrの指し示す先は上記行が終わる時に解放され、不定となります。
どうもありがとうございました。
試行錯誤してみます。
ところで・・・アタッチとデタッチはどういう意味なんでしょうか?
>ところで・・・アタッチとデタッチはどういう意味なんでしょうか?
その話の中でどう言う意味で使われているのかまでは知りませんが、
「一般的な話」として言うなら、アタッチとデタッチは言葉通り
「取り付け」「取り外し」です。
時にはアタッチによって何かが活性化したり、デタッチによって
非活性化する場合も有ります。
ツイート | ![]() |