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

CEDEC 2007

DirectX Vista

『R23 Windows Vistaゲーム開発』無事終わりました.お越しいただいた皆様,ありがとうございました.

フォローアップ 1

最後に D3DX ランタイム有無の起動時チェックの質問をいただいて,「最近の DXUT サンプルは D3DX の遅延ロードを使っているようなので,もしかしたら何か対策を取っているかも?」という回答をしましたが,あのあと少し調べてみました.
結論から言えば,最近のサンプルでも,昔 CodeZine記事を書いた 時とほとんど変わっていませんでした.DLL が見つからなければ,見慣れたダイアログが表示されるかと思います.
セッションでも紹介した DirectX SDK August 2007 の CustomUI のソースを追いかけてみましたが,グローバル変数のコンストラクタ内で D3DX の関数を呼び出してしまっているので,D3DX DLL の遅延ロードを指定しても WinMain 以前に d3dx9_35.dll がロードされるという結果になります.例えばCustomUI.cpp の先頭部分.

CModelViewerCamera      g_Camera;

そして DXUTcamera.cpp より.

//--------------------------------------------------------------------------------------
// Constructor 
//--------------------------------------------------------------------------------------
CModelViewerCamera::CModelViewerCamera()
{
    D3DXMatrixIdentity( &m_mWorld );

遅延ロードの ヘルパ関数 を上書きすると WinMain 以前であっても DLL 遅延ロードをフックできるのですが,CRT の初期化フェイズにあるためあんまり無茶なことはやらない方が良いような気がします.
グローバル変数のコンストラクタで D3DX を使うような場面では,素直に exe を 2 つ作って多段階の起動にするのがベターでしょう.

フォローアップ 2

実は時間があったら IMM32 の解説も考えていたのですが,そこまで必要そうな雰囲気でもなかったのでばっさりカットした部分があります.
んでその発表資料が手元に残っているわけですが,とりあえず置いておきます.誰の役にも立たなさそうですが,むしろ自分でそのうち使うかもしれないので,みたいな.