こんにちは
BSTR型についてわからないことがあり、質問させて頂きます。
私の理解では、
typedef struct _BSTR {
int length;
LPWSTR string; ← ここがBSTR
} BSTR;
のようなイメージだと解釈おり、SysAllocString などは、length 部分を考慮した動作をして
いると思っています。
分からないことというのは、MSDN の COM サンプルで、BSTR を引数とするメソッドの呼び出し
で、
L文字列
を渡している部分です。これでは length の部分はめちゃくちゃですし、そもそも原則アクセ
ス不可のはずだと思います。
なぜ BSTR に WCHAR* を渡すことができるのでしょうか?(const は省いています。)
> MSDN の COM サンプルで、BSTR を引数とするメソッドの呼び出しで、
> L文字列
> を渡している部分です。
そんなのがありますか。ダメですね。
COM となると直される確率は低いですが、一応、こちら
http://social.msdn.microsoft.com/Forums/ja-JP/vddocumentsja/threads
から修正依頼を出して頂けますか。
まぁ、length の部分が使われるのは VB 等の他言語やマーシャリングが絡む場合だと思
うので、相手が C++ で書かれているとわかっていれば、動かないことはないと思いま
す。
aetos様
やはり駄目ですよね。現在WMIを勉強中で、個人のホームページでのサンプルにはあっても良い
としても、MSDNにもそう記載されているとなると、なんらかの暗黙の変換ルールがあるのかと
思っていました。
MSDNのサンプルでもBSTRに渡す場合の書き方として、
_bstr_t(Lほげほげ)
SysAllocString(Lほげほげ)
Lほげほげ
なんて3通りあるもので、一体何を基準に使い分けしているんだろう、と勘繰ってしまいまし
た。まあ、人間が書くものですから...
ただ、単に引数にBSTRを渡すだけでSysAllocStringって、何かすごく無駄な(というかオー
バーヘッドが大きい)感じがしますね。あくまで感覚的に、です。
ところで、WMIってなんでもできるのは良いのですがいかんせん抽象的過ぎて、WMIのルールと
いうか世界観に馴染むのが大変ですね。
すっきりしました。
ありがとうございました。