用于导入 C++ DLL 的工具

Posted

技术标签:

【中文标题】用于导入 C++ DLL 的工具【英文标题】:Tool for Importing C++ DLL 【发布时间】:2010-03-10 11:28:48 【问题描述】:

我的公司使用定期更新的第三方 C++ DLL。我一直在手动创建 C# DLLImport 语句,但在最后一次更新中,函数的数量几乎翻了一番。是否有任何工具(最好是免费的)可以从非托管 C++ .dll 或 .lib 文件创建 C# DLLImport? (DLL 导出修饰的 C++ 函数,而不是 C++ 类)。

【问题讨论】:

【参考方案1】:

Microsoft 的托管、本机和 COM 互操作团队在 Codeplex 上提供了一些工具,其中一个名为

的工具

P/Invoke Interop Assistant

我自己没有尝试过,但它看起来好像可以满足您的需求。

【讨论】:

不是我需要的:“要使用该工具,您可以输入 MSIL 程序集并获取 C 源代码以获得正确的非托管签名,或者输入具有非托管签名的 C 源代码并获取正确的 VB /C#。” @steve-weeks:据我所知,您将需要 C/C++ 源代码,因为本机 DLL 不存储导出函数的签名(请参阅 ***.com/questions/386133/…)甚至是 lib 文件将以编译器特定的方式存储签名。 +1 divo @Steve-weeks 大概您一直在使用来自第 3 方的 C++ 标头来创建 DLLImport 语句?只需将这些标头放入 PInvoke 助手中,它就会生成 C#【参考方案2】:

据我所知,这样的工具不存在。您必须自己为每个函数编写 P/Invoke 声明。我认为这也很好,因为 C++ 函数通常充满了微妙之处,包括输入/​​输出上下文、c 样式字符串、c 样式数组、指针、引用等等。很多时候,预期的输入/输出只能通过文档来表达,而工具不可能为函数输出正确的编组声明。

【讨论】:

这有点道理,但像 P/Invoke Interop Assistant 这样的工具仍然可以自动完成 90% 的转换,从而为您节省数小时繁琐且容易出错的苦差事。【参考方案3】:

我会写一个 C++/CLI 包装器。

【讨论】:

这不是重点。我知道我可以写代码,我想避免这种情况。

以上是关于用于导入 C++ DLL 的工具的主要内容,如果未能解决你的问题,请参考以下文章

unity3d导入c ++ dll,用于通过引用方法传递

C++生成的DLL用啥工具反编译

编写用于 C# 的非托管 C++ DLL

关于DLL调试的两个工具(dependency walker和dumpbin.exe)

利用VS2010工具,反编译C++的dll

带有插件、dll 和 3rd 方工具的大型 c++ 项目的结构