2016-02-18 3 views
1

У меня есть приложение Xamarin Forms-app на C# и с помощью набора инструментов DirectX с interop-вызовами на C++.Авария приложения Win8 на Win10 (D3D11CreateDevice return null)

Приложение является приложением Windows 8.1 и отлично работает на Windows 8.1 и работает на моем компьютере под управлением Windows 10.

Но однажды я запустил Visual Studio 2015 и собирался запустить приложение в Windows 10. Он просто терпит крах извне. Я думаю, что обновление для Windows 10 может быть проблемой?

Во всяком случае, здесь есть некоторый код из набора DirectX Инструмент для Windows8.1:

ThrowIfFailed(
    D3D11CreateDevice(
    nullptr,     // Specify null to use the default adapter. 
    D3D_DRIVER_TYPE_HARDWARE, 
    0, 
    creationFlags,    // Optionally set debug and Direct2D compatibility flags. 
    featureLevels,    // List of feature levels this app can support. 
    ARRAYSIZE(featureLevels), 
    D3D11_SDK_VERSION,   // Always set this to D3D11_SDK_VERSION for Windows Store apps. 
    &device,     // Returns the Direct3D device created. 
    NULL,      // Returns feature level of device created. 
    &context     // Returns the device immediate context. 
    ) 
    ); 

// Get D3D11.1 device 
ThrowIfFailed(
    device.As(&m_d3dDevice) 
    ); 

D3D11CreateDevice кажется вернуть нулевое (устройство и контекст) и аварии в device.As (& m_d3dDevice) и ошибка В сообщении говорится, что некоторые компоненты SDK могут отсутствовать.

Любой, кто знает, в чем проблема может быть? Есть ли какой-либо DirectX SDK, который я должен установить? Зачем мне запускать приложение раньше?

Спасибо!

+0

Необходимо предоставить точные сообщения об ошибках, – Drop

ответ

1

С DirectX ТЗ: http://directxtk.codeplex.com/workitem/1317

Это потому, что ваши creationFlags являются D3D11_CREATE_DEVICE_DEBUG, которые будут терпеть неудачу, если у вас не установлен Direct3D отлаживать устройство - это только для разработчиков машин.

Поскольку вы находитесь в Windows 10, вероятно, вы были обновлены с одной сборки на другую, что отключает устройство отладки, потому что оно устарело. Вам нужно снова включить его.