2017-01-13 42 views
0

Прежде чем начать, я знаю, что это довольно распространенный вопрос, я искал ответы перед публикацией здесь. К сожалению, мне не повезло.Не могу открыть исходный файл d3dx9.h

В моем коде я включаю файл, как это:

#include <d3dx9.h> 

Теперь ошибка появляется: Не удается открыть исходный файл d3dx9.h

В моих Include Directories я введите путь туда, где его (если я просматриваю его вручную через мои файлы, я вижу его там).

Путь: C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include

Я также установить библиотеки каталога: C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64

x64, так как я бегу 64-битной системе.

Я был бы очень признателен, если бы кто-то мог потратить время, чтобы опубликовать предложение.

Приветствия.

+0

Вы проверили, что файл 'd3dx9.h' действительно включен в путь включения? – roalz

+0

У меня есть да, и насколько я вижу. Это действительно так. – unknowncoder

+0

Какую версию Visual Studio вы используете? Вы проверили, что DirectX SDK включает путь, правильно выбранный вашим проектом C++ (см. Свойства проекта)? – roalz

ответ

2

Visual Studio 2015 включает в себя Windows 8.1 SDK, который является новее, чем заголовки в унаследованном SDK DirectX. SDK Windows 8.1 включает в себя все заголовки и библиотеки DirectX, но не содержит устаревшую библиотеку D3DX (D3DX9, D3DX10, D3DX11), поэтому она «отсутствует».

D3DX9, D3DX10 и D3DX11 доступны только в устаревшем SDK DirectX. С VS 2010, VC++ настройки каталогов вы должны были использовать распределились следующим образом для Win32 (x86) настройки:

<ExecutablePath>$(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath)</ExecutablePath> 
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath> 
<LibraryPath>$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath> 

и это для x64 родной:

<ExecutablePath>$(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86;$(ExecutablePath)</ExecutablePath> 
<IncludePath>$(DXSDK_DIR)Include;$(IncludePath)</IncludePath> 
<LibraryPath>$(DXSDK_DIR)Lib\x64;$(LibraryPath)</LibraryPath> 

С VS 2012 или более поздней версии, должен обратный их, так как большинство заголовков в Windows 8 SDK заменить старый DirectX SDK:

<ExecutablePath>$(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x86</ExecutablePath> 
<IncludePath>$(IncludePath);$(DXSDK_DIR)Include</IncludePath> 
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x86</LibraryPath> 

и

<ExecutablePath>$(ExecutablePath);$(DXSDK_DIR)Utilities\bin\x64;$(DXSDK_DIR)Utilities\bin\x86</ExecutablePath> 
<IncludePath>$(IncludePath);$(DXSDK_DIR)Include</IncludePath> 
<LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib\x64;</LibraryPath> 

См MSDN, Where is the DirectX SDK (2015 Edition)?, The Zombie DirectX SDK и Not So Direct Setup.

При всем том, что вы, вероятно, не должны использовать устаревший Direct3D 9. Использование DirectX 11 с одной из современных замен для D3DX является лучшим, более чистым вариантом и не требует устаревшего DirectX SDK. См. Living without D3DX.

Если вы специально таргетинга для запуска программы на Windows XP SP3 с Direct3D 9, вы будете использовать v140_xp Platform Toolset, которая использует для Windows 7.1a SDK, не винда 8.1 SDK. Поэтому вы идете со старой школой. См. this post.

+0

Вау я очень благодарю вас за это, очень полезно! Правильный ответ :). – unknowncoder