読者です 読者をやめる 読者になる 読者になる

コピペの件

Vista DirectX

セッションではちらっとしか言いませんでしたが,この SDK のバグ自体,Microsoft の中の人がサンプルを作るときにコードの切り貼りで作ったっぽいバグです.

case WM_IME_SETCONTEXT:
    DXUTTRACE( L"WM_IME_SETCONTEXT\n" );
    //
    // We don't want anything to display, so we have to clear this
    //
    lParam = 0;
    return false;



DXUT のサンプルコードに,IME についてとても詳しい人が関わっているのは間違いないです.日本語 IME だけでなく,中国語の IME や韓国語の IME 固有の処理も念入りに書かれていて,特に中国語 IME の古いバージョンへの対応の執念などはすさまじいものがあります.
それだけに,こんな単純なミスがあるというのはどうも腑に落ちないんですね.
むしろ誰か別の人が移植中に,あるいは本人がリファクタリング中に (まるまるコピペではなく) 切り貼りコピペでこのバグを入れてしまったと考えると考えた方がしっくりくるというわけです.つまり,元々正しく動いていたコードから,以下の部分だけをまずコピペし,

case WM_IME_SETCONTEXT:
    DXUTTRACE( L"WM_IME_SETCONTEXT\n" );
    //
    // We don't want anything to display, so we have to clear this
    //
    lParam = 0;

次に,DefWindowProc に渡さないとねーと return false を書き足します.
そして Windows XP で動作確認すると“無事に”動いているのでああ問題ないなと思うわけです.
とまあ Microsoft か DXUT の作者が 10 年単位で枯らされた IME 対応コード資産を持っていて,それをぺたぺた切り貼りしながらフレームワークIME 対応させたのだとしたら,今回のようなバグはあってもおかしくないよなぁと.まあ推測ですけどね.
って,そいういえば DXUT は元々外部で作られていたサンプルフレームワークを Microsoft が取り込んだとかそういうの話もちらっと聞いたような憶えが.もうちょっと調べてみるか……