假设我有一个用纯C编写的dll。我有一个inculde文件(.h)所以我可以使用VS 2012 C项目中的dll。
有没有办法根据include文件中的metainfo生成一个C#包装类,或者我必须手动编写所有[DllImport] ... dll的C源代码也可用。
(请注意:这不是COM库)
提前致谢
答案 0 :(得分:2)
有些工具可以提供帮助,但总的来说,你必须在某种程度上自己编写包装代码。主要原因是C头文件没有完全指定接口。例如,考虑这个功能:
void foo(int* x);
此函数是否接收指向单个int
的指针,或者它是否接收到指向数组的指针?你没办法告诉我这些信息。因此,任何创建包装器的工具也必须使用某种形式的注释来完整地描述函数的语义。如果这些注释不存在,则需要创建它们。在这一点上,手动编写包装器可能会变得更快更容易。
作为编写C#pinvokes的替代方法,您可以使用混合模式C ++ / CLI程序集。这可以包括头文件和导入库的链接。然后你需要做的就是编写一个C ++ / CLI ref类来包装接口,并添加C ++ / CLI程序集作为对C#项目的引用。