ページ 11

LPSTR型の文字列をLPWSTR型に変換するには?

Posted: 2009年7月15日(水) 15:49
by なすがに
お世話になっております。

Win XP SP3 VC++ 2008EE を使用しています。言語はVC++です。

先日ここで質問し、ファイルのプロパティの概要に文字列を書き込む方法を教えていただきました。
http://www.play21.jp/board/formz.cgi?ac ... &rln=36675

教えていただいたサンプルプログラムを元に、
コマンドラインの引数で指定された文字列を、ファイルのプロパティの概要に書き込む
プログラムを作成しています。

単純に直接代入するコードを書いたところコンパイルエラーが出たので、
文字列の型があってないのが原因と思い確認してみたところ、
WinMainの引数 lpCmdLine は、LPSTR型で、
書き込み先の構造体のメンバ propWrite.pwszVal は、LPWSTR型でした。

試しに(LPWSTR)でキャストを行い作ってみたのですが、
書き込みこそできるものの、文字化けが起こってしまいます。
例えば、
abcdefg

扡摣晥gFdz
になります。

LPSTR型で受けた文字列をLPWSTR型に変換するには、どのようにすればよいのでしょうか。

よろしくお願いいたします。

Re:LPSTR型の文字列をLPWSTR型に変換するには?

Posted: 2009年7月15日(水) 16:03
by 御津凪
LPSTR 型の元は char* 型(ANSI 文字列)で、
LPWSTR 型の元は wchar_t* 型(UNICODE 文字列)となっています。

つまり、 ANSI 文字列から UNICODE 文字列に変換する必要があります。

VC++ では、 wbtowcs_s という UNICODE 文字列へ変換する関数があり、
それを使用すれば変換が可能です。

または、 WinMain の代わりに wWinMain を使用する方法もあります。
wWinMain の引数は、
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int);
となっており、LPWSTR でコマンドライン引数を受け取ることが出来ます。

Re:LPSTR型の文字列をLPWSTR型に変換するには?

Posted: 2009年7月15日(水) 22:58
by なすがに
早速のご回答ありがとうございます。

教えてくださった関数は、mbstowcs_s関数でしょうか。
始めて使用する関数でしたが、こちらのページを参考にしながら
使ってみたところ、うまくいきました。
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx

また、wWinMainを使用する方法でも、目的を達成できました。
特別な処理が必要なさそうでしたので、こちらでやることにしました。

特に文字の型について、大変勉強になりました。
丁寧なご回答ありがとうございました。