有没有一种工具可以为任意非托管DLL生成P /调用签名?

问题描述

| 我偶然发现了一个为Microsoft自己的非托管DLL生成P / Invoke签名的工具:PInvoke Interop Assistant 是否有类似的工具可以为第三方非托管DLL生成P / Invoke签名? 或者,通过任何方式将第三方DLL馈送到PInvoke Interop Assistant 编辑:我正在尝试解决的实际问题     

解决方法

        Google很快找到了http://www.pinvoker.com/(兼容性列为VS2005、2008和2010;它似乎没有进行更新以与更新的版本配合使用) Microsoft的C ++ / CLI编译器也可以执行此操作,如果您使用
/clr:safe
#include
头文件,它将生成p / invoke代码,您可以使用以下代码提取该代码: ILSpy(免费)或Red Gate Reflector(以前免费)。     ,        我使用UI中的第三个选项卡将PInvoke Interop Assistant用于非托管DLL,标记为“ SigImp Translate Snippet”。只需将标题复制并粘贴到\“ Native Code Snippet \”窗口中,然后按Generate(或启用Auto Generate)。作为说明,这里有一些我的问题的代码。请注意,由于某些原因,错误不会显示在“错误”面板中,而是显示在生成的代码顶部。 正如几个人已经说过的那样,应该将生成的代码用作指南-您可能必须进行更改才能准确获得所需的内容。     ,        这个项目很活跃,看起来很有希望完成这项任务:https://github.com/mono/CppSharp     ,        您可以通过将xInterop C ++ .NET Bridge与.NET到Native C ++ Bridge结合使用,为任何本机DLL创建C#包装器,包括C样式DLL导出功能和C ++ DLL导出类。有一些限制,可以免费评估。 免责声明:我是xInterop C ++ .NET Bridge的作者。     ,        另一个选择是SharpGenTools。 SharpDX使用它来“自动”创建DirectIX api的绑定。 还有CppSharp,QtSharp使用它来生成对本机C ++ / C库的绑定。到目前为止,CppSharp仅与.Net Framework 6+兼容。     ,        使用VS SDK随附的Dumpbin.exe, 转储,您仍然需要从转储的数据中手动编写pinvoke签名