【问题标题】:Using C# libraries in C++在 C++ 中使用 C# 库
【发布时间】:2023-04-04 02:45:02
【问题描述】:

我用 C# 开发了一个处理 TCP/IP 连接的应用程序,在运行了一些诊断程序之后,我得出结论认为编译和运行时可以改进。我决定用 C++ 重写整个程序,因为它在 Lunix 环境中运行也更流畅。

有没有办法在 C++ 中使用 C# 库,例如 Sockets、Net 和 Net.IPAddress?

我对此做了一些研究,发现我可以通过以下方式在 C++ 中调用这些库:#using (shevron)System.dll> 但我很犹豫是否会在 Lunix 环境中导致开销和问题。

【问题讨论】:

  • 如果您担心代码的可移植性(到 Linux)和性能,您需要用 C++ 重写代码。在 C++ 中使用相同的旧 C# 代码和一些额外的库将无济于事。此外,仅用 C++ 编写代码不会自动使其跨平台
  • “Lunix”?你的意思是“Linux”吗? Microsoft 的 C++ 语言扩展 C++/CLI 是为 .Net 互操作性而设计的,但很确定这不适用于单声道 Does Mono .NET support and compile C++ / CLI?
  • Using C# dll in C++ code的可能重复
  • 您不必担心“开销和问题”,您的程序永远不会在 Linux 或任何其他 Unix 风格上运行。这种 C++ 互操作风格仅在 Windows 上可用。
  • #using 指令是 C++/CLI 功能。

标签: c# c++ sockets tcp libraries


【解决方案1】:

正如我在评论中所说,有关于从本机代码使用 C# 库的 Mono 文档,参见。评论中的链接http://www.mono-project.com/docs/advanced/embedding/。原生程序基本上为此嵌入了 Mono 运行时。

Hans Passant 提出了有效的反对意见,即您的 C++ 代码中的 #using 指令表明您的“C++”代码实际上是 Microsoft 专有的 C++/CLI,无法在 Linux 下编译。移植多少工作很大程度上取决于您使用了多少非 C++ 功能。与 Mono 的互操作也会比调用微软生态系统中的 C# 函数更复杂。

如果您查看性能,我的直觉是网络密集型代码的性能将由网络主导。除非您的目标是嵌入式系统,否则浪费几个 CPU 周期应该不是问题。在 PC 上,以 Mono 或本机运行可能没有太大区别。但这也很大程度上取决于实际应用程序(更多通信还是更多计算?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多