積年のバグの原因を発見したので忘れないうちにメモ。
ああ、ちなみに僕はC/C++言語しかわからんのでWindowsプラットフォームSDK+Cの場合の話ですが、恐らくどの言語でも共通で発生すると思います。
VisualStudio2005ではVisualStudio6.0や.NET、.NET2003では問題がなかったリソース中の文字列の終端文字の扱いが変わってます。
・・・ちょっとうまく説明できてませんね、すいません。
まぁ、試してみるとこんな感じ。
まず一つ前のバージョンであるVisualStudio.NET2003でString Tableを作り、ファイルの保存ダイアログなどでよく使う途中に終端文字を含んだ文字列を作ります。
なんとなく普通に\0を途中に入力。
そうするとこうなります。
\0が\000にエスケープされるらしい。
らしいってのはざっと調べたのですがこれが仕様なのかそもそも\0なんて入力しちゃイカンのかわかんなかったから。(すいません今度調べておきます)
でもとりあえず正しくリソースはコンパイルされるし、思い通りの結果が得られます。
リソースファイルをみてもご覧のとおり。
で、今まではそのようにして使っていたのですが、このプロジェクトをVisualStudio2005で開くと問題発生。
どういうわけか、終端文字の処理がおかしいらしく\0以降にでたらめなデータが入ります。
ホントにでたらめなんですが、どうやら内部で文字列のコピーする時に\0までしかコピーしてない感じですね。長さだけは残るようで不定値と思われる化けた文字が表示されます。
こんな感じ。
サービスパックが出ているので適用したら直るかと思いきや直ってませんでした。・・・ただし\0以降が表示されるようなバグはなくなった。
・・・んだけど結局文字列の後半が消えてしまうので思い通りの結果が得られません。
んー。
これはVisualStudio2005のバグなのか、そもそも終端文字を書いてはいけない仕様なのかわかりませんが、2003→2005の以降では問題になるので注意が必要です。