wsprintfA/wvsprintfA と_vsnprintf の動作が違う!?
拡張カーネル v2.0b以降では wsprintfA/wvsprintfA と wsprintfW/wvsprintfW の処理を
msvcrt.dllの _vsnprintf / _vsnwprintf を使った 文字出力を行ってるのですが
どうも、 user32.dll の処理と違う部分があるようです。
というのは、以下のような場合
構文 | msvcrt.dll | user32.dll |
wsprintf("%#x",1041) | 0x411 | 0x411 |
wsprintf("%#x",0) | 0 | 0x0 |
wsprintf("%#04x",1041) | 0x411 | 0x0411 |
なんてことでしょう
Σ(・ω・;)
というか、このせいで、 Install Shield の一部のバージョンがこけてるみたいです。
なんとなく、msvcrt.dll のバグ臭くもあるわけですが。
Windows Vista の msvcrt.dll や VC++2010の msvcr100.dll で試してみましたが、同じ結果に・ω・;
仕様違いっていやらしいですね
_vsnprintf / _vsnwprintfのその挙動は、プログラミング言語Cの仕様として決まっているので、それで正しいのです(正確にはsnprintf / swprintfなど、下線で始まらないprintf群についての仕様ですが)。