首页 > 解决方案 > SharpDX '不支持这样的接口'

问题描述

我在这里看到这篇文章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 固有的东西?

标签: screenshotdirectx-11sharpdx

解决方案


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

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

1) 创建一个 DXGI 1.1 工厂接口 ( IDXGIFactory1)。

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

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

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

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

这个过程的最后一步是事情失败的地方。IDXGIOutput1这是因为标准 Windows 7 不支持您要求的界面 ( ) - 它需要 Windows 8+ 或带有平台更新的 Windows 7。您可以在 MSDNIDXGIOutput1文档的需求部分中看到这一点。

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


推荐阅读