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

Why don't you tell me the truth?

.NET DirectX

(Managed) DirectX アプリケーションは,ランタイムライブラリが存在するかどうか実行時に確かめ,そして問題があればそれをきちんとユーザに伝える必要があります.XCopy インストールを目指す場合は特にです.
例えば DirectX SDK のチュートリアル通りにインポートライブラリを使って d3d9.dll にリンクしたとします.そのアプリケーションを DirectX 9 が実行できない環境で起動すると,ユーザが見るのは「d3d9.dll が見つかりません」というエラーメッセージです.さすがにこのメッセージから「最新の DirectX をインストールする必要がある」ことにたどり着けというのは酷かもしれません.その結果かどうかは知りませんが,先月この日記に来られた検索キーワード第二位が「google:d3d9.dll」でした.エンドユーザが DLL 名で検索しているのだとしたら,それはかなり異常な状況だと考えるべきです.
ちなみに最近の SDK に付属するようになったサンプルフレームワーク(いわゆるDXUT)は,ほとんどの DLL を明示的にロードすることでこの問題に対応しています.例えば d3d9.dll が見つからなかった場合は以下のようなメッセージが表示されます.ソースコードで提供されているフレームワークなので,文面が気に入らなければいくらでも修正が可能です.

Could not initialize Direct3D. You may want to check that the latest version of DirectX is correctly installed on your system. Also make sure that this program was compiled with header files that match the installed DirectX DLLs.

そして Managed DirectX の場合は .NET Framework に MDX Runtime と心配事の種はさらに多くなります.解決方法のひとつは,ローダー部分を Native C++ で作ってひとつひとつランタイムライブラリの存在を確認しながらロードを進めていくことです.