自动执行C+的C#包装+;图书馆

自动执行C+的C#包装+;图书馆,c#,c++,pinvoke,C#,C++,Pinvoke,在发帖之前,我做了一些关于这方面的研究,但我找不到一个针对我所处环境的直接答案 我有一个C++第三方库。我可以访问库的.dll、.lib和.h标题 我想使用p/invoke包装库,以便在C#中使用。我想知道在做这件事和维护它方面我有什么选择。我希望通过.h头,我可以利用一些应用程序自动提供包装器代码 我对各种解决方案都感兴趣,包括商业软件解决方案和尝试自动管理包装器代码的任何陷阱。您可以免费尝试。您可以编写脚本,使其作为构建过程的一部分自动运行 就个人而言,我只是使用[DllImport]编写一

在发帖之前,我做了一些关于这方面的研究,但我找不到一个针对我所处环境的直接答案

我有一个C++第三方库。我可以访问库的
.dll
.lib
.h
标题

我想使用p/invoke包装库,以便在C#中使用。我想知道在做这件事和维护它方面我有什么选择。我希望通过
.h
头,我可以利用一些应用程序自动提供包装器代码

我对各种解决方案都感兴趣,包括商业软件解决方案和尝试自动管理包装器代码的任何陷阱。

您可以免费尝试。您可以编写脚本,使其作为构建过程的一部分自动运行

就个人而言,我只是使用
[DllImport]
编写一些包装。你真的需要从C++中访问C++库中的所有东西吗?我经常发现您实际上只需要调用几个函数,而dllimport的简单性非常好

我希望通过.h头,我可以利用一些应用程序自动提供包装器代码

如果这是可能的话,那就太好了,但事实并非如此。这是不可能的,因为头文件没有包含足够的信息来确定如何封送参数。例如,考虑这个声明:

void foo(int *x);
什么是
x
?它的类型是
int*
,指针指向
int
。但它是指向单个
int
值的指针,还是
int
的数组?您无法从头文件中分辨。您需要阅读文档

数据流呢。信息是流入本机代码,还是流出本机代码,还是双向流动?同样,该细节不能用头文件表示

现在,有各种注释约定可以帮助实现这一点。本质上,这些宏的计算结果为零,工具可以读取,因此有助于转换。您可以看到Win32 API函数在中用
\u注释、
\u在
中用
\u注释等。这些函数可能会有所帮助,但只有最简单的库可以自动转换为p/invoke声明

现在,如果您准备向原始头文件添加额外的注释,那么您可能有机会。只要您在注释或宏中表达缺少的信息,现有的工具肯定有可能做得很好。SWIG当然值得一看,还有其他工具


我的回答的基本点是试图让大家明白,这样的翻译并不像你希望的那样自动化。就我个人而言,我总是手工编写我的p/invoke声明。这使我能够完全按照我想要的方式获取它们,而且维护并不是什么大问题,因为DLL接口通常不会改变。它们不会改变,因为您不想破坏二进制兼容性。

是否[DllImport]不足以满足您的需要?@GeraldSv:这将需要我手动从DLL中写入所需的所有函数(所有函数),不是吗?@S.Richmond:哦,是的,你在寻找自动化解决方案,所以这不起作用。快速的谷歌搜索给了我这个:@elgonzo-是的,我自己刚找到。现在就开始测试。谢谢大卫。我想这是我期望得到的答案,但在我自己不知道的情况下,我需要在我继续之前验证它(或者在本例中,一起停止)。