生成P/Invoke代码的最简单方法是什么?

Ope*_*Ope 20 c c# pinvoke

我是一位经验丰富的.Net程序员,但在我的生活中还没有编译过C/C++程序.现在我有这个C-dll,标题和文档(第三方,而不是来自Win API),我需要从中调用十种方法.

我在考虑使用Platform Invoke.我发现这三个工具可以为我创建代码:

可能

  • Swig:http://www.swig.org/

Pinvoker似乎与Interop助手和向导有一些不同的方法.Swig我刚刚检查时发现这个问题没有在这里提出.

这些工具的优缺点是什么?

鉴于我对C/C++知之甚少,对我来说生成P/Invoke代码的最佳=最简单,最安全的方法是什么?

Bri*_*tle 3

请参阅http://dotnetperls.com/dllimport-interop了解互操作示例,并参阅这篇MSDN 文章了解更多信息。这方面的圣经是Adam Nathan 的

基本上,您需要识别 DLL 中要调用的函数。这些需要用 extern 标记,以便外部世界可以访问它们。下一步可能会很棘手,那就是为该函数编写 DllImport。这需要在托管和非托管世界之间进行映射。您将需要弄清楚如何将 C dll 中的任何复杂数据结构封送到托管代码中。

您应该检查 DLL 是否有任何类型的 COM 接口。首先确保您确实需要使用 P/Invoke。

SWIG 最初用于包装 C/C++ 代码以供脚本语言使用。它根据接口描述生成 C# 代码(请参阅教程)。如果 P/Invoke 是一个选项,我不建议在 C# 中使用它。