我发现了一个工具,可以为微软自己的非托管DLL生成P/Invoke签名:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管DLL生成P/Invoke签名?
或者,有没有办法将第三方DLL提供给PInvoke Interop Assistant?
编辑:我要解决的实际问题
我发现了一个工具,可以为微软自己的非托管DLL生成P/Invoke签名:PInvoke Interop Assistant
是否有类似的工具可以为第三方非托管DLL生成P/Invoke签名?
或者,有没有办法将第三方DLL提供给PInvoke Interop Assistant?
编辑:我要解决的实际问题
谷歌很快就找到了 http://www.pinvoker.com
(Wayback) (兼容性列为VS2005、2008和2010;似乎没有更新以适用于更新的版本)
Microsoft的C++/CLI编译器也可以做到这一点,如果您使用/clr:safe
并#include
头文件,它将生成p/invoke代码,您可以使用例如ILSpy(免费)或Red Gate Reflector(曾经是免费的)提取。
正如几位用户所说,生成的代码应该用作指南-您可能需要进行更改以获得所需结果。
这个项目很活跃,看起来非常适合任务:https://github.com/mono/CppSharp
另一种选择是SharpGenTools。它被SharpDX用于“自动”创建directx api的绑定。 还有CppSharp, 它被QtSharp用于生成与本地C++/C库的绑定。到目前为止,CppSharp仅与.Net Framework 6+兼容。
我使用ClangSharpPInvokeGenerator命令行开源工具来完成这个任务。
作为输入,它需要一组C头文件。也支持C++文件,不过我没有测试过C++。
extern "C"
导出的函数,这些信息在二进制文件中不存在。C++导出使用装饰名称导出,Dumpbin可以解码。但这仍然不是这个问题的答案。 - IInspectable