.net 是否有工具可以为任意非托管DLL生成P/Invoke签名?

envsm3lx  于 2023-02-17  发布在  .NET
关注(0)|答案(7)|浏览(216)

我偶然发现了一个为Microsoft自己的非托管DLL生成P/Invoke签名的工具:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管DLL生成P/Invoke签名?
或者,将第三方DLL提供给PInvoke Interop Assistant的任何方法
编辑:Actual issue我正在尝试解决

flmtquvp

flmtquvp1#

谷歌很快找到了http://www.pinvoker.comWayback)(兼容性列表为VS 2005、2008和2010;它似乎没有被更新以与较新版本一起工作)
微软的C++/CLI编译器也可以做到这一点,如果你使用/clr:safe#include作为头文件,它会生成p/invoke代码,你可以用ILSpy(免费)或Red Gate Reflector(以前是免费的)提取这些代码。

j8ag8udp

j8ag8udp2#

我使用PInvoke Interop Assistant来处理非托管DLL,方法是使用UI中标记为“SigImp Translate Snippet”的第三个选项卡。只需将标题复制并粘贴到“Native Code Snippet”窗口中,然后按Generate(或打开Auto Generate)即可。下面是question of mine中的一些代码作为示例。请注意,由于某些原因,错误不会出现在错误面板中,而是作为注解出现在生成代码的顶部。
正如一些人已经说过的,生成的代码应该作为一个指南--您很可能必须进行更改才能得到您想要的东西。

3xiyfsfu

3xiyfsfu3#

此项目正在进行中,并且看起来有希望完成以下任务:https://github.com/mono/CppSharp

rur96b6h

rur96b6h4#

您可以使用xInterop C++ .NET Bridge with .NET to Native C++ Bridge为任何本机DLL(包括C样式DLL导出函数和C++ DLL导出类)创建C# Package 器。它可以免费试用,但有一些限制。
免责声明:我是xInterop C++ .NET Bridge的作者。

toe95027

toe950275#

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

ctrmrzij

ctrmrzij6#

我使用ClangSharp开源工具。这是一个命令行应用程序,有大量的设置来自定义输出。Windows和Linux都支持。

polhcujo

polhcujo7#

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

相关问题