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

时间:2010-03-22 20:50:38

标签: c# c pinvoke

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

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

可能

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

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

鉴于我对C / C ++不太了解,生成P / Invoke代码的最佳=最简单,最安全的方法是什么?

2 个答案:

答案 0 :(得分:4)

有关互操作示例,请参阅http://dotnetperls.com/dllimport-interop,有关详细信息,请参阅此MSDN article。这篇文章的圣经是Adam Nathan's book

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

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

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

答案 1 :(得分:2)

如果函数的签名很简单,则设置需要10分钟 - 即如果它们需要2个char *并返回一个int。它只有一次变得复杂而变得混乱

pinvoke上的圣经是Adam Nathans - .NET and COM: The Complete Interoperability Guide

我同意其他海报 - swig不是正确的事情