SharpDX'没有支持这样的界面'

时间:2018-05-25 17:47:58

标签: screenshot directx-11 sharpdx

我在这里发现了这篇文章C# Which is the fastest way to take a screen shot? ,我正在努力实现利用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固有的东西吗?

1 个答案:

答案 0 :(得分:1)

SharpDX只不过是针对Direct3D的本机C / C ++ COM接口的瘦管理代码包装器。因此,您可以在MSDN上的Direct3D documentation中找到所需的所有信息。我强烈建议你阅读那些你能找到的东西,因为几乎所有的限制和警告都适用于SharpDX。

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

1)创建DXGI 1.1 Factory界面(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 ++接口。