1

D3DXに対してアプリをビルドした場合June2007_d3dx9_34で、ターゲットシステムに新しいバージョンのNov2007_d3dx9_36がある場合、それは問題になりますか?

MSのredist-installerツールを使用してD3DXDLLを配布しましたが、1台の「クリーンな」PC(以前にD3DXがインストールされていません)に気づきました。D3DXDLLが見つからないというエラーが発生しました。インストーラー自体が機能していないかどうかを判断する前に、DLLの新バージョンを提供することが問題であるかどうか疑問に思いました。アプリは、正確な名前のDLLを探しますか?

4

2 に答える 2

2

D3DX ライブラリは下位互換性がなく、API はバージョン間で変更される場合があります。したがって、ターゲット システムには、アプリケーションのビルドに使用する D3DX と同じバージョンが必要です。新しいバージョンでは機能しません。

アプリケーションでDependency Walkerを使用すると、正確なバージョン番号を持つ DLL に依存関係があることが示されます。

于 2011-05-24T10:45:04.687 に答える
1

DirectX SDK の再配布可能ファイルには、D3DX dll の全履歴が含まれています。DirectX 再頒布可能パッケージの最新バージョンをインストールすると、これらの dll のすべてのバージョンでシステムが終了するはずです。再配布可能コンポーネントのサイズを縮小するために、再配布可能コンポーネントのディレクトリ構造から cab ファイルを削除することにより、アプリケーションが必要なファイルのみをインストールすることが可能であり、許可されています。たとえば、37 ではありません。

アプリケーションから D3DX および D3DCOMPILER dll の依存関係を削除すると、d3d9 d3d10 および d3d11 コア dll がバージョンに依存せず、Windows サービス パック リリースにも関連付けられているため、アプリケーションが動作することを確認できます (つまり、Vista 用の D3D11 は Vista に由来します)。 SP2 または Win7 ストック インストールなど)。

依存関係を削除してアプリを起動させるもう 1 つの方法は、dll を遅延ロード モジュールにすることです。これにより、必要な場合にのみロードされます (開発環境でシェーダーをコンパイルするなど)。シェーダーがエンドユーザーのマシンに適切に存在することが確実である限り、シェーダーをコンパイルする必要はなく、クラッシュすることもありません。LoadLibrary を呼び出して関数を手動で呼び出すことは、より安全な選択であり、より適切なエラー メッセージを選択できますが、より多くの作業が必要になります。

于 2011-07-06T08:33:10.197 に答える