BSTR型文字列をchar型文字列に変換するには?

解決


日々精進  2003-02-05 21:14:07  No: 51013

BSTR型の文字列をchar型の文字列に変換しようと思っています。

BSTR LocationURL;
char c_LocationURL[100];
pIWebBrowser2->get_LocationURL(&LocationURL);

このように取得したBSTR型の文字列を、char型に
変換したいと思うのですが、どのようにコーディングしたら
よいでしょうか?

また、BSTR型の使い方は上記の定義で正しいでしょうか?
MessageBoxW()でLocationURLの内容を表示させてみると,
LocationURLには file:///c:/a/test.htm という文字列が
入っているようです。
LocationURLがc_LocationURLのバッファを壊したりは
しないものなのでしょうか?


日々精進  2003-02-06 01:08:29  No: 51014

今回はLocationURLがc_LocationURLのバッファを壊したりは
しないようでした。
ただし、LocationURL変数を使用後 SysFreeString() で
内部で確保したリソースを解放する必要があるようです。

引き続き正しいBSTR型の使い方や、char型文字列への
変換方法のご教示をお待ちしています。


YuO  2003-02-06 01:50:55  No: 51015

BSTRってのは,結局wchar_tへのポインタのはずです。
でもって,
BSTR p;として*(p - 1)には長さの情報があるはず。

char型への変換はWideCharToMultiByte APIで可能です。
int n = WideCharToMultiByte(
    CP_ACP, /* とりあえずは現在のANSIコードページを利用 */
    0, /* 変換に使うフラグ。とりあえず0 */
    LocationURL, /* 変換元の文字列 */
    SysStringLen(LocationURL), /* ナル文字終端なら-1でもよいが,BSTRの場合は長さを渡す */
    c_LocationURL, /* 変換後の文字列格納先 */
    sizeof(c_LocationURL) - 1, /* ナル文字の分を用意 */
    0, /* 変換できない文字は既定の文字(?)に変換 */
    0); /* 変換できない文字があったか否かの情報は不要 */


日々精進  2003-02-13 19:26:04  No: 51016

お返事が送れまして済みません。
YuOさんに教えていただいた関数で
問題なく変換できました。
7番目の引数は,変換できない文字を
とりあえず変換しておく,デフォルトの文字コードを
入れておくようですね。
今回は変換結果が1byte文字だけになる状況だったので,
0 を設定しました。


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

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






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