15

私の開発プラットフォームは Windows 7 x64 です。VS2012 をインストールしましたが、Dx11 コードを含むプロジェクトをコンパイルしたいと考えています。

具体的には、次のファイルが含まれます。

#include <d3dx11.h>
#include <d3dx10.h>

とへのリンク

#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")

開発マシンには既に VS2011 がインストールされていますが、VS2012 のネイティブ C++ の単体テスト機能を試してみたかったのです。

VS2011 をインストールして DirectShow コードで作業しているため、Windows 7.1 SDK をインストールしました。

VS2012 はこれを取得し、7.1 SDK への参照を持っていましたが、7.1 SDK を参照して VS2012 でプロジェクトをコンパイルするとエラーが発生しました。

"warning C4005: '__useHeader' : macro redefinition"

これをグーグルで検索したところ、social.msdn.microsoft.com で私のようなクエリが見つかりました。この問題を解決するには、7.1 SDK の代わりに Windows 8 キットとリンクすることを推奨します。

Windows 8 キットには、d3d11.h などのヘッダーが含まれていますが、d3dx11.h は含まれていません。

複数の「マクロ再定義」エラーを発生させずに、d3dx11 (Dx SDK から) を Windows 8 キットと一緒に含めるにはどうすればよいですか?

4

1 に答える 1

17

この MSDN ページで、次のかなり厄介な引用を見つけました。

D3DX は、Windows 8 で Direct3D を使用するための正規の API とは見なされないため、対応する Windows SDK には含まれていません。Direct3D API を操作するための代替ソリューションを調査します。

Windows 7 (およびそれ以前) の DirectX SDK サンプルなどのレガシー プロジェクトの場合、DirectX SDK を使用して D3DX でアプリケーションをビルドするには、次の手順が必要です。


プロジェクトの VC++ ディレクトリを次のように変更して、SDK ヘッダーとライブラリの正しい順序を使用します。

私。プロジェクトの [プロパティ] を開き、[VC++ ディレクトリ] ページを選択します。
ii. すべての構成とすべてのプラットフォームを選択します。
iii. これらのディレクトリを次のように設定します。

実行可能ディレクトリ: (右側のドロップダウン)

インクルード ディレクトリ: $(IncludePath);$(DXSDK_DIR)Include

ライブラリ ディレクトリを含める: $(LibraryPath);$(DXSDK_DIR)Lib\x86

iv。[適用] をクリックします。
v. x64 プラットフォームを選択します。vi. ライブラリ ディレクトリを次のように設定します。

ライブラリ ディレクトリ: $(LibraryPath);$(DXSDK_DIR)Lib\x64

「d3dx9.h」、「d3dx10.h」、または「d3dx11.h」がプロジェクトに含まれている場合は、「d3d9.h」、「d3d10.h」、および「dxgi.h」、または「 d3d11.h" と "dxgi.h" を最初に確認して、新しいバージョンを取得していることを確認してください。

必要に応じて、警告 C4005 を無効にすることができます。ただし、この警告は、これらのヘッダーの古いバージョンを使用していることを示しています。

プロジェクト内の DXGIType.h へのすべての参照を削除します。このヘッダーは Windows SDK には存在せず、DirectX SDK のバージョンは新しい winerror.h と競合します。

すべての D3DX DLL は、DirectX SDK のインストールによって開発用コンピューターにインストールされます。必要な D3DX 依存関係が、サンプルと共に、または別のマシンに移動された場合はアプリケーションと共に再配布されていることを確認してください。

D3DX11 の現在の使用に代わるテクノロジには、DirectXTex と DirectXTK が含まれることに注意してください。D3DXMath は DirectXMath に置き換えられました。

FFS マイクロソフト、API の中間バージョンをこのように変更しないでください!!!

于 2012-09-17T13:11:41.593 に答える