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

标签 c# c++ interop directx com-interop

我已经使用 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/

相关文章:

c# - 如何解释这个 "call is ambiguous"错误?

c++ - if语句跳转

java - 在 Clojure 中创建 flexmark 扩展

c# - 当包含 "$"的文本时,Regex.IsMatch 不起作用

c# - nameof 运算符有什么方法可以访问方法参数(在同一方法之外)?

c++ - 在循环中执行移位操作时 C++ 中的内存泄漏

c++ - 支持初始化 std::map 成员编译器错误

c++ - 用mingw和msys把VC++库转成mingw库?

c# - 在同一解决方案中使用 VB.NET 和 C#

c# - 以 xamarin 形式缩放 webview 的文本