screenshot - 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 固有的东西?
解决方案
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++ 接口。
推荐阅读
- mysql - 如何在 MySQL 中以特定时间戳步长选择特定日期/时间范围内的所有行?
- javascript - MS Edge 中的 getRangeAt(0) 错误,解决方法?
- c# - 从串口获取的绘图数据逐渐变慢
- java - elasticsearch 和 searchguard ssl 的密钥库和信任库问题
- laravel - 保存关系后,Laravel 得到错误的关系结果
- java - 需要排球授权
- python - 在 digitalocean 中部署 django 应用程序后,我在服务器中看不到我的更改?
- django - 通过 DRF 中的一个 post 请求创建互连模型的多个模型实例
- c++ - C ++变量内容在2个函数之间丢失[虚幻]
- swift - 如何在 iPad 的 Swift Playgrounds 中创建 UIImageView?