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

Managed DirectX Bootstrapper package

DirectX .NET

今見直してみると紹介し忘れていたみたいですが,昨年の段階で Managed DirectX Bootstrapper package を作っている人はいます,というのはこの辺の話について.「とっちゃんのBlog」より.

ところで、この情報使って自分でブートストラッパーそのものを作るのはありなのかなぁ?

@IT Insider.NET 会議室」より.

記事を読んだときにちらっとヘルプ見ただけで、ちゃんと読んでないんだよなぁ...
DirectX でも出来そうな気もしますけど...どうなんだろう?

実際上は id:NyaRuRu:20051214#p1 で紹介した Web Installer が結構便利で,ユーザ権限の問題をなんとかできるならこいつに丸投げで良さそうに見えます.ちなみに同じ URL で「DirectX End-User Runtimes (December 2005) Web Installer」から「DirectX End-User Runtimes (February 2005) Web Installer」に更新されていたので,Permanent Link 的に扱えそうです.
あとはまあ,CodeZine の例の記事で書いたような DirectX ランタイムの存在チェックをちゃんとやってくれるアプリケーションが増えることを願うのみですかね*1.依然として「d3dx9_28.dll」とか「d3d9.dll」で検索してこの日記にやってきている人は多いです.

「d3d9.dll」が存在しない理由のほとんどは、エンドユーザの環境にDirectXランタイムがインストールされていないことです。しかし残念なことに、開発者がそのことを伝える前にOSのローダーは上記のような、一般的で正確な、しかし不親切なメッセージを表示してしまいます。そしてエンドユーザは説明書を見る前に、Webブラウザを立ち上げ検索ページに向かうことでしょう。

このようなダイアログの代わりに、ユーザに最新のDirectXランタイム導入を促すメッセージを伝えられれば、多くの人々の大切な時間を節約できるに違いありません。その方法のひとつは、「d3d9.dll」を静的インポートせずに、実行時に動的にロードするというものです。LoadLibraryA APIの呼び出しに失敗しても直ちにプロセスがクラッシュするということはありませんから、アプリケーションはもっと穏便なメッセージを表示させてからプロセスを終了することができます。

FAQ は先読みで潰すのが一番.
http://amagame.blog12.fc2.com/blog-entry-1897.html

*1:別に DLL の遅延ロードを使う必要はなくて,ランタイムチェック後にプログラム本体を起動するローダーを用意しても良いでしょう