gpt4 book ai didi

c# - C++ 和 C# 互操作性 : P/Invoke vs C++/CLI

转载 作者:IT老高 更新时间:2023-10-28 23:10:57 24 4
gpt4 key购买 nike

在寻找 C# 和 C++ 之间互操作方法的过程中,我发现了 article这解释了 P/Invoke。

我读了很多文章,声称 C++/CLI 不是完全的 C++,需要一些努力来修改原始 C++ 代码。

我想问当我有一些我想从 C# 对象中使用的 C++ 对象(代码/数据)时,最佳方式是什么。

  • 看来,为了使用 P/Invoke,我应该提供 C 风格的 API。这是真的吗?我的意思是,有没有办法将 C++ 对象导出到 C#,比如带有 P/Invoke 的 SWIG?或者,我是否必须为此使用 SWIG?
  • 将 C++ 更改为 C++/CLI 有多难?与将 C++ 重写为 C# 相比,是否值得尝试? C++ 设计得很好,所以用 C# 实现它并不是什么大问题。
  • (题外话)有没有反过来的?我的意思是,如果我想使用 C++ 中的 C# 代码,有什么办法吗?

最佳答案

我不建议将您的 C++ 库重写为 C++/CLI。相反,我会编写一个可以从 C# 调用的 C++/CLI 包装器。这将由一些 public ref class 类组成,每个类可能只管理 native 类的一个实例。您的 C++/CLI 包装器只需“包含 header ,链接到库”即可使用 native 库。因为您已经编写了 public ref class 类,所以您的 C# 代码只是添加了一个 .NET 引用。您在每个公共(public) ref 类中所做的只是使用 C++ 互操作(也称为 It Just Works 互操作)来调用 native 代码。如果您愿意,可以在使用外观时应用外观。

关于c# - C++ 和 C# 互操作性 : P/Invoke vs C++/CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150477/

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