【问题标题】:How to wrap my native C library for C#?如何为 C# 包装我的本机 C 库?
【发布时间】:2017-04-13 14:29:23
【问题描述】:

我有一个带有非常大头文件的大型原生 C 库。

头文件包含 50 个枚举、500 个结构和 5 个方法。

我曾经使用 P/Invoke 为 C# 包装它,50 个枚举都是复制粘贴,方法很少,但是我花了 大量的精力来编写结构。 p>

当库更新时,我应该检查所有结构,看看是否有任何数据类型发生了变化。

曾经有人告诉我,使用 CLR 更快、更高效。我希望找到一种方法可以将非托管枚举和结构转换为托管。但正如我测试的那样,我似乎必须再次以托管样式制作结构并复制它们的字段。

是真的吗?

有什么办法可以简化结构转换?

【问题讨论】:

  • 调用C++/CLI,可以读取.h文件。应该提到 SWIG,尽管它是一种解决一个问题并产生两个新问题的工具。您只需要考虑使界面更薄,500 个结构是完整的。像 xml 或 json 这样更动态的东西可能是明智的。
  • @HansPassant 该库是我公司给我的。我无法改变它。
  • 不清楚你为什么认为你需要改变它。重点是让 C# 接口不那么痛苦,这样您就不必重复所有这些结构声明。

标签: c pinvoke clr unmanaged managed


【解决方案1】:

使用 Mono 项目中的 CppSharp,您可以轻松快速地从本机代码的 C/C++ 头文件生成 .NET 绑定。

完整的文档可以在这里找到:https://github.com/mono/CppSharp/blob/master/docs/GeneratingBindings.md

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多