39

我偶然发现了一个为微软自己的非托管 DLL 生成 P/Invoke 签名的工具:PInvoke Interop Assistant

是否有类似的工具可以为第三方非托管 DLL 生成 P/Invoke 签名?

或者,将第三方 DLL 提供给PInvoke 互操作助手的任何方式

编辑:我试图解决的实际问题

4

6 回答 6

48

Google 很快找到了http://www.pinvoker.com/(兼容性列为 VS2005、2008 和 2010;它似乎没有更新以适用于较新的版本)

Microsoft 的 C++/CLI 编译器也可以做到这一点,如果您使用/clr:safe#include文件,它将生成 p/invoke 代码,您可以使用例如 ILSpy(免费)或 Red Gate Reflector(以前是免费的)提取这些代码。

于 2011-06-12T02:04:10.630 回答
15

我通过使用 UI 中标记为“SigImp Translate Snippet”的第三个选项卡将PInvoke Interop Assistant用于非托管 DLL。只需将您的标题复制并粘贴到“本机代码片段”窗口中,然后按生成(或打开自动生成)。作为说明,这里有一些来自我的问题的代码。请注意,由于某些原因,错误不会出现在错误面板中,而是作为生成代码顶部的注释出现。

正如一些人已经说过的那样,生成的代码应该用作指南——您可能必须进行更改才能得到您想要的。

在此处输入图像描述

于 2014-11-09T01:47:23.337 回答
10

这个项目很活跃,看起来很有希望:https ://github.com/mono/CppSharp

于 2015-11-17T04:29:27.057 回答
4

您可以使用xInterop C++ .NET Bridge with .NET to Native C++ Bridge为任何本机 DLL 创建 C# 包装器,包括 C 样式的 DLL 导出函数和 C++ DLL 导出类。它可用于免费评估,但有一些限制。

免责声明:我是xInterop C++ .NET Bridge的作者。

于 2016-09-22T02:23:02.347 回答
3

另一种选择是SharpGenTools。SharpDX 使用它来“自动”创建directx api 的绑定。还有CppSharp,QtSharp 使用它来生成与本机 C++/C 库的绑定。到目前为止,CppSharp 仅与 .Net Framework 6+ 兼容。

于 2019-03-05T02:08:30.323 回答
-4

使用 VS SDK 附带的 Dumpbin.exe Dumpbin,您仍然需要从转储的数据中手动编写 pinvoke 签名

于 2011-06-12T02:04:20.053 回答