D3D11CreateDevice 0x887a002d错误

时间:2017-06-02 17:13:04

标签: c++ directx direct3d

首先我正在学习Frank Luna的DirectX 11书籍我来到了我需要创建设备的部分,但它给出了错误:" 0x887a002d:应用程序请求了一个依赖于SDK组件的操作缺失或不匹配。"我一直在寻找,我尝试了不同的解决方案,但没有做到,

我试过的解决方案: 1)我正在使用visual studio 2015附带的DirectX库,所以我安装了它。(正确) 2)我尝试将其更改为D3D11CreateDeviceAndSwapChain但它也给出了同样的错误

我有DirectX SDK(2010年6月)连接到项目(是的,我想使用DirectX旧版SDK)。

我的代码:

HRESULT hr;
UINT CreateDeviceFlags = 0;
D3D_FEATURE_LEVEL featureLevel;
UINT m4xMsaaQuility;


    #if defined(DEBUG) || defined(_DEBUG)
      CreateDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
    #endif

hr = D3D11CreateDevice(
    0,
    D3D_DRIVER_TYPE_HARDWARE,
    0,
    CreateDeviceFlags,
    0, 0,
    D3D11_SDK_VERSION,
    &m_pDevice,
    &featureLevel,
    &m_pDeviceContext);

if (FAILED(hr))
{
    return -1;
}

包括:

#include <iostream>
#include <Windows.h>

#include <d3d11.h>
#include <d3dcompiler.h>
#include <DirectXMath.h>
#include <DirectXColors.h>

// Link Library Dependencies
#pragma  comment(lib, "d3d11.lib")
#pragma  comment(lib, "dxgi.lib")
#pragma  comment(lib, "d3dcompiler.lib")
#pragma  comment(lib, "winmm.lib")

1 个答案:

答案 0 :(得分:6)

您尚未提及您正在使用的操作系统。

该错误表示您的系统具有支持D3D11_CREATE_DEVICE_DEBUG所需的DirectX SDK Layer包。您可以通过构建一个不使用此标志的Release配置来验证它是否可以创建Direct3D 11设备。

传统的DirectX SDK(即使是最后一个,2010年6月)仅在使用DirectX 11.0时安装适用于Windows 7或更早版本的DirectX Developer Debug Runtime。它不支持带有KB 2670838(a.k.a DirectX 11.1),Windows 8,Windows 8.1或Windows 10的Windows 7 SP1。

  • 如果您使用的是带有KB 2670838的Windows 7 SP1,那么您应该从安装Windows 8.1 SDK(VS 2015附带)中获得正确的Debug SDK层。请参阅DirectX 11.1 and Windows 7 Update

  • 如果您使用的是Windows 8,Windows 8.1或Windows 8.1 Update,那么您应该从安装Windows 8.1 SDK(VS 2015附带)中获得正确的调试SDK层。请注意,Windows 8不再受支持,因此您应确保转到Windows 8.1 Update或Windows 10.

  • 如果您使用的是Windows 10,则需要启用图形工具 Windows功能,该功能提供与您当前版本的Windows 10相匹配的调试SDK层。请记住,这一点是特定于操作系统版本,因此升级到较新版本或内部版本可能需要重新安装Windows功能。在企业设置中,您的IT管理员必须批准使用此Windows可选功能才能安装它。请参阅Visual Studio 2015 and Graphics Tools for Windows 10

请参阅Where is the DirectX SDK (2015 Edition)?Direct3D SDK Debug Layer Tricks

Frank Luna的书很棒,但在之前写了,因为它已经弃用了DirectX SDK。阅读this blog post了解一些重要说明。请务必阅读Living without D3DX并考虑使用GitHub中最新版本的Effects 11。

  

由于您不熟悉DirectX 11,我强烈建议您查看Anatomy of Direct3D 11 Create Device以及 DirectX工具包(适用于DirectX 11) tutorials。在完成所有Luna的书之前,你可能会很好地完成这项工作,这样你就可以在“现代”中找到一个基础。使用DirectX 11的方法。这将让你更容易从仍然非常相关的部分中辨别出Luna书中已弃用的东西。