SharpDX 'No such interface supported'

SharpDX 'No such interface supported'

我在这里遇到了这个 post 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>();

发生在执行 QueryInterface 的 output1 行。我不太了解图形驱动程序,但这是 DirectX11 配置的问题吗?或者这是 Windows 7 固有的东西?

SharpDX 只不过是 Direct3D 的本机 C/C++ COM 接口的精简托管代码包装器。因此,您需要的所有信息都可以在 MSDN 上的 Direct3D documentation 中找到。我强烈建议您通读那里可以找到的任何内容,因为几乎所有限制和注意事项都适用于 SharpDX。

现在,您的代码正在执行以下操作:

1) 创建 DXGI 1.1 工厂界面 (IDXGIFactory1)。

2) 为第一个图形适配器 (IDXGIAdapter1) 获取 DXGI 1.1 适配器接口。

3) 从上述适配器 (ID3D11Device) 创建 Direct3D 11 设备接口。

4) 从适配器接口获取第一个输出 (IDXGIOutput)。

5) 从 DXGI 1.0 输出接口查询 DXGI 1.1 输出接口 (IDXGIOutput1)。

这个过程的最后一步是失败的地方。这是因为标准 Windows 7 不支持您要求的接口 (IDXGIOutput1) - 它需要 Windows 8+ 或 Windows 7 平台更新。您可以在 MSDN 上的 IDXGIOutput1 documentation 的要求部分看到这一点。

再次强调,如果您打算进一步使用 DirectX 或 SharpDX,我强烈建议您熟悉 Direct3D 定义的 C/C++ 接口。