问题描述
|
我偶然发现了一个为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签名