使用带有.NET API的非托管C ++库

时间:2012-02-01 03:35:08

标签: c++ .net interop pinvoke unmanaged

我有一个项目,我必须使用API​​来读取专有文件类型的文件。它是封闭源代码,只是一堆可以在我的项目中添加作为参考的DLL(目前我使用的是C#)。但是,我还希望利用C ++库OpenMS(http://open-ms.sourceforge.net/)来管理和分析我获得的数据。我已经阅读了一些关于P / Invoke和创建包装器的内容(以及其他一些建议使用其他方法,例如:http://www.codeguru.com/cpp/cpp/cpp_managed/interop/article.php/c6867)但是我不确定我应该怎么做以及最好的方法是什么,尤其是因为我看到的大多数例子非常简单,这个库有很多复杂的数据类型等。由于库非常大,是否可以自动创建包装器的过程?

3 个答案:

答案 0 :(得分:1)

您不会将非托管DLL添加为引用;这只适用于用.NET语言编写的托管DLL。

如果您使用的是C#,则P / Invoke是您唯一的选择。是的,这样做所消耗的难度和时间将随着图书馆的复杂性而成比例增加。您需要确保库中使用的所有数据类型都具有托管等效项,并在必要时自行定义。不幸的是,我不知道如何自动化这个过程。

如果选择切换到C ++ / CLI,您可以更轻松地使用非托管库,将其与.NET代码混合使用。

答案 1 :(得分:1)

实际上,Mono家伙开发了与P / Invoke或C ++ / CLR不同的东西,可能对C#开发人员更友好,

http://tirania.org/blog/archive/2011/Dec-19.html

问题是它现在有多成熟,但你可以玩它并学习,

https://github.com/mono/cxxi

答案 2 :(得分:0)

不确定,也许此工具可以帮助您 - swig