【发布时间】: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