我在这里发现了这篇文章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固有的东西吗?
答案 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 ++接口。