假设我有一个用纯 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/