用于导入 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 的工具的主要内容,如果未能解决你的问题,请参考以下文章