c# - 从 C 包含文件生成 C# 包装器

标签 c# c pinvoke

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

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

(请注意:这不是 COM 库)

提前致谢

最佳答案

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

void foo(int* x);

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

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

关于c# - 从 C 包含文件生成 C# 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629848/

相关文章:

c# - 使用 LINQ 对对象列表进行分页

c - 如何在 C 中设置 uint8_t 的低 3 位

c# - 与嵌入式动态分配数组的托管/非托管类型组合无效

c# - Process.Start 的替代 native api

c - ruby C 扩展 : turning int function into ruby value

c# - 为什么包含枚举的 C++ 方法会在 SWIG/C# 中导致 AccessViolationExceptions?

c# - 非事件窗口的 ToolTip.Show 不起作用

c# - 运算符 |= 在 C# 中是什么意思?

c# - 通过用户输入过滤 ObservableCollection

使用C编程创建文件并将其保存为当前登录的用户名.txt