【问题标题】:SharpDX 'No such interface supported'SharpDX '不支持这样的接口'
【发布时间】:2018-05-30 03:06:21
【问题描述】:

我在这里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 固有的东西?

【问题讨论】:

    标签: screenshot directx-11 sharpdx


    【解决方案1】:

    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++ 接口。

    【讨论】:

    • 我可以看到我前面有很多阅读。感谢您为我指明正确的方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多