swprintfを使用した数値型の変換について


のぶ  2007-02-03 14:20:42  No: 64371  IP: [192.*.*.*]

はじめまして。
swprintfを使用して、数値型の値をWCHAR型の領域に格納することができずに困ってます。。。もしかしたら大きな認識違いをしてるのでしょうか

例)
int   work_index = 1;
WCHAR PathName[256];

swprintf( PathName, L"%s%d", L"AAAAA", work_index);

結果としては、PathNameにはAAAAAしかはいらない様に見えます

編集 削除
夏みかん  2007-02-03 14:39:38  No: 64372  IP: [192.*.*.*]

SetWindowText関数には2つの関数があります。
①SetWindowTextA関数→シフトJISコード用
②SetWindowTextW関数→Unicodeコード用
通常はコンパイル時に SetWindowText 関数がどちらか一方の関数を #define で
定義して関数を呼び出します。

このことからシフトJISコード環境で、一部だけ Unicode 文字を扱う場合は、
Unicode コード用関数を直接呼び出します。

よって、wsprintfW という関数に変えてみてはどうでしょう。
以上。試してみて下さい。

編集 削除
Blue  2007-02-03 16:00:03  No: 64373  IP: [192.*.*.*]

コードは間違ってはいないようです。
(WinAPIではないのでUnicodeビルドとか関係ないが)

>結果としては、PathNameにはAAAAAしかはいらない様に見えます
どのようにして確認しましたか?

もしかしたらロケールを設定しないとだめとか。

_wsetlocale(LC_ALL, L"japanese");

編集 削除
PATIO  2007-02-05 14:57:44  No: 64374  IP: [192.*.*.*]

確認に使った手段まで含めて公開しないと
確認手段がおかしいかどうかの判断が付かないですね。
その辺まで含めて説明した方が良いと思いますよ。

編集 削除
どら  2007-02-08 09:39:43  No: 64375  IP: [192.*.*.*]

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さんが仰るとおり、確認手段は公開した方がいいです。
今のままだと
     ・変数に正しく値が格納されていない
     ・格納はされているが、表示がおかしい
のどちらかがわかりません。

確認したときにデバッグモードでウオッチしたのでないのであれば、どの関数で表示確認をしたのかも明記した方がいいですよ^^

編集 削除