BSTRについて – プログラミング – Home

通知
すべてクリア

[解決済] BSTRについて


あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

こんにちは

BSTR型についてわからないことがあり、質問させて頂きます。

私の理解では、

typedef struct _BSTR {
int length;
LPWSTR string; ← ここがBSTR
} BSTR;

のようなイメージだと解釈おり、SysAllocString などは、length 部分を考慮した動作をして
いると思っています。

分からないことというのは、MSDN の COM サンプルで、BSTR を引数とするメソッドの呼び出し
で、

L文字列

を渡している部分です。これでは length の部分はめちゃくちゃですし、そもそも原則アクセ
ス不可のはずだと思います。
なぜ BSTR に WCHAR* を渡すことができるのでしょうか?(const は省いています。)


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> MSDN の COM サンプルで、BSTR を引数とするメソッドの呼び出しで、
> L文字列
> を渡している部分です。

そんなのがありますか。ダメですね。
COM となると直される確率は低いですが、一応、こちら
http://social.msdn.microsoft.com/Forums/ja-JP/vddocumentsja/threads
から修正依頼を出して頂けますか。

まぁ、length の部分が使われるのは VB 等の他言語やマーシャリングが絡む場合だと思
うので、相手が C++ で書かれているとわかっていれば、動かないことはないと思いま
す。


返信引用
あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

aetos様

やはり駄目ですよね。現在WMIを勉強中で、個人のホームページでのサンプルにはあっても良い
としても、MSDNにもそう記載されているとなると、なんらかの暗黙の変換ルールがあるのかと
思っていました。

MSDNのサンプルでもBSTRに渡す場合の書き方として、

_bstr_t(Lほげほげ)
SysAllocString(Lほげほげ)
Lほげほげ

なんて3通りあるもので、一体何を基準に使い分けしているんだろう、と勘繰ってしまいまし
た。まあ、人間が書くものですから...

ただ、単に引数にBSTRを渡すだけでSysAllocStringって、何かすごく無駄な(というかオー
バーヘッドが大きい)感じがしますね。あくまで感覚的に、です。

ところで、WMIってなんでもできるのは良いのですがいかんせん抽象的過ぎて、WMIのルールと
いうか世界観に馴染むのが大変ですね。

すっきりしました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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