【问题标题】:Generate C# wrapper from C include file从 C 包含文件生成 C# 包装器
【发布时间】:2014-03-25 17:13:58
【问题描述】:

假设我有一个用纯 C 编写的 dll。我有一个包含文件 (.h),因此我可以使用 VS 2012 C 项目中的 dll。

有没有办法根据包含文件中的元信息生成 C# 包装类,或者我必须手动编写所有 [DllImport]...? dll 的 C 源代码也可用。

(请注意:这不是 COM 库)

提前致谢

【问题讨论】:

标签: c# c pinvoke


【解决方案1】:

有一些工具可以提供帮助,但总的来说,您必须在某种程度上自己编写包装器代码。主要原因是 C 头文件没有完全指定接口。例如,考虑这个函数:

void foo(int* x);

这个函数是接收一个指向单个int 的指针,还是接收一个指向数组的指针?您无法仅凭这些信息来判断。因此,任何创建包装器的工具也必须使用某种形式的注释来完全描述函数的语义。如果这些注释不存在,您将需要创建它们。到那时,手动编写包装器可能会变得更快更容易。

作为编写 C# pinvokes 的替代方法,您可以使用混合模式 C++/CLI 程序集。这可以包括头文件和针对导入库的链接。然后,您需要做的就是编写一个 C++/CLI 引用类来包装接口,并将 C++/CLI 程序集添加为对您的 C# 项目的引用。

【讨论】:

  • David 写道“...有一些工具可以帮助...”。我理解这些限制。工具是什么... :-)?
  • 例如:stackoverflow.com/questions/2495632/… 但就我个人而言,我从未使用过其中任何一种,并且非常怀疑它们的价值。我总是会编写自己的 p/invokes。
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多