[解決済み] MultiByteToWideCharの使用方法を教えてください。
質問
通常の
string
を
wstring
. このために、私は Windows API 関数を使おうとしています。
MultiByteToWideChar
.
しかし、それは私のために動作しません。
以下は、私が行ったことです。
string x = "This is c++ not java";
wstring Wstring;
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , x.size() , &Wstring , 0 );
最後の行は、コンパイラーエラーを発生させます。
'MultiByteToWideChar' : cannot convert parameter 5 from 'std::wstring *' to 'LPWSTR'
このエラーを修正するにはどうしたらいいですか?
また、引数の
cchWideChar
? 0でいいんですか?
解決方法は?
を呼び出す必要があります。
MultiByteToWideChar
を2回実行します。
-
の最初の呼び出しは
MultiByteToWideChar
は、ワイド文字列に必要なバッファサイズを求めるために使用されます。を見てください。 マイクロソフトのドキュメント ;と記載されています。もし、この機能が成功し cchWideChar が 0 の場合、戻り値は lpWideCharStr .
このように
MultiByteToWideChar
は、必要なサイズを与えるために、最後のパラメータの値として0を渡します。cchWideChar
. またNULL
をその前のものと同じにします。lpWideCharStr
. -
前のステップのバッファサイズを使用して、ワイド文字列を収容するのに十分な大きさの非構成バッファを取得します。このバッファを
MultiByteToWideChar
. そして今回、最後の引数は0ではなく、実際のバッファのサイズにする必要があります。
大雑把な例です。
int wchars_num = MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, NULL , 0 );
wchar_t* wstr = new wchar_t[wchars_num];
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, wstr , wchars_num );
// do whatever with wstr
delete[] wstr;
また、-1 を使っていることに注意してください。
cbMultiByte
引数で指定します。これにより、結果の文字列はヌル終端となり、それらを処理する手間が省けます。
関連
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み】std::stringからchar*への変換
-
[解決済み】 ostreamの<<演算子を適切にオーバーロードする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です