【问题标题】:What are the advantages of using C++/CLI instead of C# for wrapping a (third party) C-library (dll)?使用 C++/CLI 而不是 C# 来包装(第三方)C 库 (dll) 有什么优势?
【发布时间】:2012-05-25 07:19:50
【问题描述】:

我有一个需要从 C# 使用的第三方 C 库。系统的其余部分是用 C# 编写的,因此使用 C++/CLI 只是包装器的一种选择。

使用 C++/CLI 来包装 C 库而不是 C# 有哪些优势?创建 C#-wrapper 有什么好处吗?

这些库包含一些结构、一些枚举和许多函数。

编辑:是否可以在 C# 中使用 C 结构和枚举而不包装它们?

【问题讨论】:

    标签: c# c dll c++-cli wrapper


    【解决方案1】:

    使用 C++/CLI 的优点是您可以在同一个程序集中编写本机代码和托管代码。

    使用 C++/CLI 时与 C 库交互更容易,您可以正常使用所有库,并且仍然公开完全托管的 .NET 接口或类。但当然 C++/CLI 增加了一些复杂性。

    另一方面,在 C# 中,您需要重新声明所有结构并使用 DllImport 在 C# 中再次声明您的 C-Function。

    我会说对于简单的互操作任务(比如一些函数和几个结构),使用 C# 和 PInvoke 就可以了。如果使用需要大量结构重定义、固定、转换等的完整 API,C++/CLI 可能是更好的选择。

    【讨论】:

    • 所以基本上是库复杂度的问题。对于更复杂的库,请使用 C++/CLI,但您可以通过简单的库摆脱 C#。
    • @HåkonK.Olafsen 是的,基本上。当然,这也取决于你想对结果做什么。如果他们需要处理大量“C++ 东西”,例如 memcpy、reinterpret_cast 等,C++/CLI 也可能是这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多