2012-09-17 17 views
15

Nền tảng phát triển của tôi là các cửa sổ 7 x64. Tôi đã cài đặt VS2012 và tôi muốn biên dịch một dự án bao gồm một số mã Dx11.d3dx11.h không có trong bộ Windows 8.0

Cụ thể, nó bao gồm các tập tin sau đây:

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

và liên kết đến

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

Tôi đã có cài đặt VS2011 trên máy phát triển của tôi, nhưng tôi muốn thử các cơ sở kiểm tra đơn vị trong VS2012 cho native C++.

Do VS2011 được cài đặt và làm việc trên mã DirectShow, tôi đã cài đặt Windows 7.1 SDK.

VS2012 chọn này lên và có tham chiếu đến 7.1 SDK, nhưng lập dự án của tôi dưới VS2012 với 7.1 SDK tham chiếu cho các lỗi:

"warning C4005: '__useHeader' : macro redefinition" 

Tôi googled này và thấy a query like mine on social.msdn.microsoft.com. và giải pháp đề nghị liên kết với bộ Windows 8 thay vì 7.1 SDK để giải quyết vấn đề này.

Bộ Windows 8 bao gồm các tiêu đề như d3d11.h, nhưng không phải d3dx11.h.

Làm cách nào để bao gồm d3dx11 (từ SDK Dx) cùng với bộ Windows 8 nhưng không nhận được nhiều lỗi "định nghĩa lại macro"?

Trả lời

17

Tôi đã tìm thấy báo giá khá khó chịu sau đây trong this MSDN page.

D3DX không được coi là API chuẩn để sử dụng Direct3D trong Windows 8 và do đó không được bao gồm trong SDK Windows tương ứng. Điều tra các giải pháp thay thế để làm việc với API Direct3D.

Đối với dự án di sản, chẳng hạn như Windows 7 (trở về trước) DirectX SDK mẫu, các bước sau đây là cần thiết để xây dựng các ứng dụng với D3DX sử dụng DirectX SDK:


Sửa VC++ thư mục của dự án như sau để sử dụng đúng thứ tự cho tiêu đề SDK và thư viện.

i. Mở thuộc tính cho dự án và chọn Thư mục VC++ .
ii. Chọn Tất cả cấu hình và Tất cả nền tảng.
iii. Thiết lập các thư mục như sau:

Thư mục Executable: (Trên bên cánh phải, thả xuống)

Include Directories: $ (IncludePath); $ (DXSDK_DIR) Bao gồm

Bao gồm Thư mục Thư viện : $ (LibraryPath); $ (DXSDK_DIR) Lib \ x86

iv. Nhấp vào Áp dụng.
v. Chọn Nền tảng x64. vi. Đặt thư mục Thư viện như sau:

Thư mục Thư viện: $ (LibraryPath); $ (DXSDK_DIR) Lib \ x64

Bất cứ nơi nào "d3dx9.h", "d3dx10.h" hoặc "d3dx11.h" được bao gồm trong dự án của bạn, hãy chắc chắn bao gồm rõ ràng "d3d9.h", "d3d10.h" và "dxgi.h" hoặc "d3d11.h" và "dxgi.h" trước tiên để đảm bảo bạn đang chọn phiên bản mới hơn.

Bạn có thể tắt cảnh báo C4005 nếu cần; tuy nhiên, cảnh báo này cho biết bạn đang sử dụng phiên bản cũ hơn của các tiêu đề này.

Xóa tất cả các tham chiếu đến DXGIType.h trong dự án của bạn. Tiêu đề này không tồn tại trong Windows SDK và phiên bản DirectX SDK xung đột với winerror.h mới.

Tất cả D3DX DLL được cài đặt vào máy tính phát triển của bạn bằng cách cài đặt Direct2 SDK DirectX SDK. Đảm bảo rằng các phụ thuộc D3DX cần thiết được phân phối lại với bất kỳ mẫu hoặc ứng dụng nào của bạn nếu nó là được chuyển sang một máy khác.

Lưu ý rằng các công nghệ thay thế cho các ứng dụng hiện tại của D3DX11 bao gồm DirectXTex và DirectXTK. D3DXMath được thay thế bằng DirectXMath.

FFS Microsoft, xin vui lòng không thay đổi phiên bản trung bình của API như thế này !!!

+7

Đồng ý, đặc biệt là khi tất cả sách hiện tại trên DirectX11 sử dụng rộng rãi d3dx11.h, sự điên rồ! – JMK

Các vấn đề liên quan