Использование неуправляемой библиотеки C ++ с .NET API - PullRequest
1 голос
/ 01 февраля 2012

У меня есть проект, в котором я должен использовать 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 ]

1 голос
/ 01 февраля 2012

Парни из Mono на самом деле разрабатывают что-то отличное от P / Invoke или C ++ / CLR и могут быть более дружелюбны для разработчиков на C #,

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

Вопрос в том, насколько зрелым это правильносейчас, но вы можете играть с ним и учиться,

https://github.com/mono/cxxi

1 голос
/ 01 февраля 2012

Вы не добавляете неуправляемые библиотеки DLL в качестве ссылок; это работает только для управляемых DLL, написанных на языке .NET.

Если вы используете C #, P / Invoke - ваш единственный вариант. Да, сложность и время, затрачиваемое на это, будут увеличиваться пропорционально сложности библиотеки. Вы должны будете убедиться, что есть управляемые эквиваленты всех типов данных, используемых библиотекой, определяя их самостоятельно в случае необходимости. К сожалению, я не знаю ни одного способа автоматизации этого процесса.

Если вариант перехода на C ++ / CLI является опцией, вам будет гораздо проще, поскольку вы можете напрямую использовать неуправляемую библиотеку, смешивая ее с вашим кодом .NET.

0 голосов
/ 01 февраля 2012

Не уверен, может быть, этот инструмент поможет вам - swig

...