SharpDX «Такой интерфейс не поддерживается» - PullRequest
0 голосов
/ 25 мая 2018

Я наткнулся на этот пост здесь C # Какой самый быстрый способ сделать снимок экрана? и пытаюсь реализовать ответ, использующий SharpDX.Похоже, что он отлично работает в Windows 10, но в Windows 7 вылетает. Ошибка, которую он выдает:

Unhandled Exception: SharpDX.SharpDXException: HRESULT: [0x800004002], Module: [General], 
ApiCode: [E_NOINTERFACE/No such interface supported], Message No such interface supported

И трассировка стека, на которую он указывает ...

var factory = new Factory1();
var adapter = factory.GetAdapter1(0);
var device = new SharpDX.Direct3D11.Device(adapter);
var output = adapter.GetOutput(0);
var output1 = output.QueryInterface<Output1>();

Происходит в строке output1, где он выполняет QueryInterface.Я не очень много знаю о графических драйверах, но это проблема с конфигурацией DirectX11?Или это что-то присуще Windows 7?

1 Ответ

0 голосов
/ 29 мая 2018

SharpDX - не более чем тонкая оболочка управляемого кода вокруг родного C / C ++ COM-интерфейса для Direct3D.Таким образом, всю необходимую информацию можно найти в документации Direct3D на MSDN.Я очень рекомендую прочитать все, что вы можете там найти, так как почти все ограничения и предостережения относятся к SharpDX.

Теперь ваш код выполняет следующие действия:

1) Создание интерфейса фабрики DXGI 1.1 (IDXGIFactory1).

2) Получение адаптера DXGI 1.1интерфейс для первого графического адаптера (IDXGIAdapter1).

3) Создание интерфейса устройства Direct3D 11 из вышеупомянутого адаптера (ID3D11Device).

4) Получение первого вывода изинтерфейс адаптера (IDXGIOutput).

5) Запрос интерфейса выхода DXGI 1.1 (IDXGIOutput1) из интерфейса вывода DXGI 1.0.

Последним этапом этого процесса является точкагде вещи терпят неудачу.Это связано с тем, что запрашиваемый интерфейс (IDXGIOutput1) не поддерживается в стандартной Windows 7 - для него требуется Windows 8+ или Windows 7 с обновлением платформы.Вы можете увидеть, что в разделе «Требования» IDXGIOutput1 документации на MSDN.

Опять же, я настоятельно рекомендую вам ознакомиться с интерфейсами C / C ++, определенными Direct3D, если вы планируетедля дальнейшей работы с DirectX или SharpDX.

...