用于导入C++;动态链接库 我的公司使用了第三方C++ DLL,它定期更新。我一直在手动创建C#DLLImport语句,但在上次更新中,函数的数量几乎翻了一番。是否有任何工具(最好是免费的)将从非托管C++、DLL或.LIB文件创建C?(DLL输出了修饰的C++函数,而不是C++类)。 < P>微软的托管、本地和COM互操作团队提供了一些工具,其中包括一个叫做的工具

用于导入C++;动态链接库 我的公司使用了第三方C++ DLL,它定期更新。我一直在手动创建C#DLLImport语句,但在上次更新中,函数的数量几乎翻了一番。是否有任何工具(最好是免费的)将从非托管C++、DLL或.LIB文件创建C?(DLL输出了修饰的C++函数,而不是C++类)。 < P>微软的托管、本地和COM互操作团队提供了一些工具,其中包括一个叫做的工具,c#,dll,dllimport,C#,Dll,Dllimport,我自己还没有尝试过,但它似乎可以满足您的需求。我会编写一个C++/CLI包装程序。据我所知,这样的工具并不存在。您必须自己为每个函数编写P/Invoke声明。我认为它也一样,因为C++函数通常都包含一些微妙的东西,包括输入/输出上下文、C样式字符串、C样式数组、指针、引用和什么。很多时候,预期的输入/输出只能通过文档表示,工具不可能为函数输出正确的编组声明。我不需要:“要使用该工具,要么输入MSIL程序集并从C源代码中获取适当的非托管签名,要么输入带有非托管签名的C源代码并获取适当的VB/C#。


我自己还没有尝试过,但它似乎可以满足您的需求。

我会编写一个C++/CLI包装程序。

据我所知,这样的工具并不存在。您必须自己为每个函数编写P/Invoke声明。我认为它也一样,因为C++函数通常都包含一些微妙的东西,包括输入/输出上下文、C样式字符串、C样式数组、指针、引用和什么。很多时候,预期的输入/输出只能通过文档表示,工具不可能为函数输出正确的编组声明。

我不需要:“要使用该工具,要么输入MSIL程序集并从C源代码中获取适当的非托管签名,要么输入带有非托管签名的C源代码并获取适当的VB/C#。”@steve weeks:据我所知,您将需要C/C++源代码,因为本机DLL不存储导出函数的签名(请参阅)甚至一个LIB文件都会以一个编译器特定的方式存储签名。史提夫1周,大概你已经使用了第三方的C++头来创建DLIMPORT语句了。把那些头放到pJoNK助手中,它将导致C的缺失。我知道我可以写代码,我想避免。这是一个,但仍然是一个像P/Invoke Interop Assistant这样的工具,可以自动完成90%的转换,为您节省了几个小时繁琐的、容易出错的苦工。