はじめまして。
swprintfを使用して、数値型の値をWCHAR型の領域に格納することができずに困ってます。。。もしかしたら大きな認識違いをしてるのでしょうか
例)
int work_index = 1;
WCHAR PathName[256];
swprintf( PathName, L"%s%d", L"AAAAA", work_index);
結果としては、PathNameにはAAAAAしかはいらない様に見えます
SetWindowText関数には2つの関数があります。
①SetWindowTextA関数→シフトJISコード用
②SetWindowTextW関数→Unicodeコード用
通常はコンパイル時に SetWindowText 関数がどちらか一方の関数を #define で
定義して関数を呼び出します。
このことからシフトJISコード環境で、一部だけ Unicode 文字を扱う場合は、
Unicode コード用関数を直接呼び出します。
よって、wsprintfW という関数に変えてみてはどうでしょう。
以上。試してみて下さい。
コードは間違ってはいないようです。
(WinAPIではないのでUnicodeビルドとか関係ないが)
>結果としては、PathNameにはAAAAAしかはいらない様に見えます
どのようにして確認しましたか?
もしかしたらロケールを設定しないとだめとか。
_wsetlocale(LC_ALL, L"japanese");
確認に使った手段まで含めて公開しないと
確認手段がおかしいかどうかの判断が付かないですね。
その辺まで含めて説明した方が良いと思いますよ。
ing APIENTRY WinMain(・・・)
{
WCHAR PathName[256];
int a = 1;
swprintf(PathName, L"%s%d", L"AAAA", a);
return 1; //ここにブレイクポイントを指定
}
Windows XP + VC++.NET2003で、以上のようなコードで、ブレイクポイントでPathNameをウオッチしたら、問題無く「AAAA1」になっていました。
この時、プロジェクトはUnicodeではなく、マルチバイトの設定にはなっていましたが、普通にいけています。
Blueさんや、PATIOさんが仰るとおり、確認手段は公開した方がいいです。
今のままだと
・変数に正しく値が格納されていない
・格納はされているが、表示がおかしい
のどちらかがわかりません。
確認したときにデバッグモードでウオッチしたのでないのであれば、どの関数で表示確認をしたのかも明記した方がいいですよ^^
ツイート | ![]() |