gpt4 book ai didi

c# - 为什么 C# PInvoke 不能与非托管 DirectX 一起工作

转载 作者:太空狗 更新时间:2023-10-29 20:36:57 28 4
gpt4 key购买 nike

我已经使用 C# 一年了,我知道您可以通过互操作/PInvoke 从 C# 访问 native 代码。我刚开始学习 DirectX 并了解到将 DirectX 与 c# 结合使用的几种方法之一是使用像 SharpDX 这样的东西,它是用 c++ 而不是 C# 编写的包装器。我的问题是;因为 C# 支持互操作性并允许程序员访问 native dll/com 对象。当涉及到 DirectX dlls/coms 时,为什么这种支持无效。我很困惑

最佳答案

这是不正确的。 SharpDX 是一个纯 C# 包装器,它通过 .NET 程序集上的 IL 字节码后处理使用一些 C++/CLI 技术。看原文post更多细节。 (在“如何避免在 C# 中使用 C++/CLI”一节中)。要在 C# 中实现 C++ 接口(interface)回调,您还可以查看此 post .

即使没有 calli IL 字节码指令,也完全有可能使用非托管委托(delegate)(通过 Marshal.GetFunctionPointerForDelegate)开发 COM 对象的完整包装器。您也可以使用常规 COM interop 来完成在 C# 中。

另一方面,如果 C++ 对象不提供 COM 接口(interface)(即只有纯虚拟方法),您将需要一个简化的 C++ 包装器访问它或处理 C++ 对象的导出重整名称(即, afaik,未标准化)

关于c# - 为什么 C# PInvoke 不能与非托管 DirectX 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36542509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com