我偶然发现了一个为微软自己的非托管 DLL 生成 P/Invoke 签名的工具:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管 DLL 生成 P/Invoke 签名?
或者,将第三方 DLL 提供给PInvoke 互操作助手的任何方式
编辑:我试图解决的实际问题
我偶然发现了一个为微软自己的非托管 DLL 生成 P/Invoke 签名的工具:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管 DLL 生成 P/Invoke 签名?
或者,将第三方 DLL 提供给PInvoke 互操作助手的任何方式
编辑:我试图解决的实际问题
Google 很快找到了http://www.pinvoker.com/(兼容性列为 VS2005、2008 和 2010;它似乎没有更新以适用于较新的版本)
Microsoft 的 C++/CLI 编译器也可以做到这一点,如果您使用/clr:safe
头#include
文件,它将生成 p/invoke 代码,您可以使用例如 ILSpy(免费)或 Red Gate Reflector(以前是免费的)提取这些代码。
我通过使用 UI 中标记为“SigImp Translate Snippet”的第三个选项卡将PInvoke Interop Assistant用于非托管 DLL。只需将您的标题复制并粘贴到“本机代码片段”窗口中,然后按生成(或打开自动生成)。作为说明,这里有一些来自我的问题的代码。请注意,由于某些原因,错误不会出现在错误面板中,而是作为生成代码顶部的注释出现。
正如一些人已经说过的那样,生成的代码应该用作指南——您可能必须进行更改才能得到您想要的。
这个项目很活跃,看起来很有希望:https ://github.com/mono/CppSharp
您可以使用xInterop C++ .NET Bridge with .NET to Native C++ Bridge为任何本机 DLL 创建 C# 包装器,包括 C 样式的 DLL 导出函数和 C++ DLL 导出类。它可用于免费评估,但有一些限制。
免责声明:我是xInterop C++ .NET Bridge的作者。
另一种选择是SharpGenTools。SharpDX 使用它来“自动”创建directx api 的绑定。还有CppSharp,QtSharp 使用它来生成与本机 C++/C 库的绑定。到目前为止,CppSharp 仅与 .Net Framework 6+ 兼容。
使用 VS SDK 附带的 Dumpbin.exe Dumpbin,您仍然需要从转储的数据中手动编写 pinvoke 签名