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のバッファを壊したりは
しないものなのでしょうか?
今回はLocationURLがc_LocationURLのバッファを壊したりは
しないようでした。
ただし、LocationURL変数を使用後 SysFreeString() で
内部で確保したリソースを解放する必要があるようです。
引き続き正しいBSTR型の使い方や、char型文字列への
変換方法のご教示をお待ちしています。
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); /* 変換できない文字があったか否かの情報は不要 */
お返事が送れまして済みません。
YuOさんに教えていただいた関数で
問題なく変換できました。
7番目の引数は,変換できない文字を
とりあえず変換しておく,デフォルトの文字コードを
入れておくようですね。
今回は変換結果が1byte文字だけになる状況だったので,
0 を設定しました。
ツイート | ![]() |