我偶然发现了一个为Microsoft自己的非托管DLL生成P/Invoke签名的工具:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管DLL生成P/Invoke签名?
或者,将第三方DLL提供给PInvoke Interop Assistant的任何方法
编辑:Actual issue我正在尝试解决
我偶然发现了一个为Microsoft自己的非托管DLL生成P/Invoke签名的工具:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管DLL生成P/Invoke签名?
或者,将第三方DLL提供给PInvoke Interop Assistant的任何方法
编辑:Actual issue我正在尝试解决
7条答案
按热度按时间flmtquvp1#
谷歌很快找到了
http://www.pinvoker.com
(Wayback)(兼容性列表为VS 2005、2008和2010;它似乎没有被更新以与较新版本一起工作)微软的C++/CLI编译器也可以做到这一点,如果你使用
/clr:safe
和#include
作为头文件,它会生成p/invoke代码,你可以用ILSpy(免费)或Red Gate Reflector(以前是免费的)提取这些代码。j8ag8udp2#
我使用PInvoke Interop Assistant来处理非托管DLL,方法是使用UI中标记为“SigImp Translate Snippet”的第三个选项卡。只需将标题复制并粘贴到“Native Code Snippet”窗口中,然后按Generate(或打开Auto Generate)即可。下面是question of mine中的一些代码作为示例。请注意,由于某些原因,错误不会出现在错误面板中,而是作为注解出现在生成代码的顶部。
正如一些人已经说过的,生成的代码应该作为一个指南--您很可能必须进行更改才能得到您想要的东西。
3xiyfsfu3#
此项目正在进行中,并且看起来有希望完成以下任务:https://github.com/mono/CppSharp
rur96b6h4#
您可以使用xInterop C++ .NET Bridge with .NET to Native C++ Bridge为任何本机DLL(包括C样式DLL导出函数和C++ DLL导出类)创建C# Package 器。它可以免费试用,但有一些限制。
免责声明:我是xInterop C++ .NET Bridge的作者。
toe950275#
另一个选择是SharpGenTools。SharpDX使用它来“自动”创建directx API的绑定。还有CppSharp,QtSharp使用它来生成本地C++/C库的绑定。到目前为止,CppSharp只兼容.Net Framework 6+。
ctrmrzij6#
我使用ClangSharp开源工具。这是一个命令行应用程序,有大量的设置来自定义输出。Windows和Linux都支持。
polhcujo7#
使用VSSDK附带的Dumpbin.exe Dumpbin,您仍然需要从转储的数据手动写入pinvoke签名