C++/C# 互操作使用什么方法? [关闭]

问题描述 投票:0回答:0

我正在开发 3D 渲染引擎并寻找一种方法将我的 C++ DirectX/Vulkan 逻辑集成到 C# 客户端中。我应该使用 C++/WinRT、C++/CX、C++/CLI 还是其他?选择一个或另一个选项的注意事项是什么?有什么架构建议吗?
我正在寻找比较和建议以正确设置它。

预期架构:

  • 编辑器应用 [C#].
  • 包装纸 [?].
  • 渲染库(或框架)[C++].

为什么选择 C#?

我的引擎需要一个编辑器来允许用户在运行时调整场景和各种属性。最初,我想用 C++ 来做,但找不到像样的 C++ GUI 框架。它们都至少存在以下问题之一:无法在 XML/XAML/任何单独的文件中定义布局并从中生成 UI,很难或不可能获得 GUI 的原生感觉,极难使用,有限的定制选项。但是大量的 C# GUI 框架没有这些问题。用 C# 开发也更快,更容易维护,因为我不需要编辑器的低级东西。


我的调查

C++/CLI 看起来是最好的解决方案:在类名前添加一个

ref
关键字,仅此而已。或不? 在这里,一位用户分享了他对 C++/CLI 的担忧。也许还有其他原因?

C++/WinRT 很难集成到构建管道中,需要一些“魔法”来更新包。链接:onetwo.

总有一种方法可以手动设置编组。它按照您告诉它的方式工作,但同样,它需要大量工作并且难以维护。也许有办法让它更容易,但我还不知道。


这是重复的!!

没有。并不真地。我发现了几个关于how to integrate C++ things into a C# program 的问题。每个人都在那里陈述了不同的方法。但是我没有在互联网上找到任何比较。我想知道哪个更好以及在什么条件下,特别是在我的特殊情况下。


Booo,基于意见!

等等,这是我需要解决的实际问题:

  1. 我的 C++ API 可能会在某些时候发生变化,所以我希望 C# 和托管包装器的变化最小。
  2. 我不希望 C# 管理所有 C++ 的东西,只管理 API。
  3. 我正在使用 WRL 来处理 COM 指针。我可以同时使用 WRL 和 WinRT,还是应该完全切换到 WinRT?
  4. 我不希望包装器对线程安全产生任何风险。
c# c++ windows interop
© www.soinside.com 2019 - 2024. All rights reserved.