Usar una biblioteca C ++ no administrada con una API .NET

Tengo un proyecto en el que debo hacer uso de una API para leer un archivo de un tipo de archivo propietario. Es de código cerrado, solo un montón de DLL que se pueden agregar como referencia en mi proyecto (actualmente estoy usando C #). Sin embargo, también deseo hacer uso de una biblioteca C ++, OpenMS (http://open-ms.sourceforge.net/) para administrar y analizar los datos que obtengo. He leído un poco sobre P / Invoke y la creación de un contenedor (y algunos otros sugirieron otros métodos como este: http://www.codeguru.com/cpp/cpp/cpp_managed/interop/article.php/c6867 ) pero no estoy seguro de cómo debo hacer esto y cuál sería la mejor manera, especialmente porque la mayoría de los ejemplos que he visto son muy simples y esta biblioteca tiene muchos tipos de datos complejos, etc. ¿Es posible automatizar el proceso de creación de un contenedor ya que la biblioteca es muy grande?

preguntado el 01 de febrero de 12 a las 03:02

Las extensiones administradas para C ++ han sido totalmente reemplazadas por C ++ / CLI. Como resultado, la información anterior a 2005 es totalmente inútil. Hay muchos preguntas sobre el uso de C ++ / CLI ya aquí en StackOverflow. -

3 Respuestas

No agrega archivos DLL no administrados como referencias; eso solo funciona para DLL administradas escritas en un lenguaje .NET.

Si está utilizando C #, P / Invoke es su única opción. Sí, la dificultad y el tiempo consumidos al hacerlo aumentarán proporcionalmente con la complejidad de la biblioteca. Deberá asegurarse de que existen equivalentes administrados de todos los tipos de datos utilizados por la biblioteca, definiéndolos usted mismo explícitamente si es necesario. Desafortunadamente, no conozco ninguna forma de automatizar este proceso.

Si cambiar a C ++ / CLI es una opción, le resultará mucho más fácil, ya que puede consumir la biblioteca no administrada directamente, mezclándola con su código .NET.

Respondido 01 Feb 12, 07:02

Realmente nunca he usado C ++ / CLI pero lo investigaré. La programación de Windows todavía me desconcierta de forma regular, ya que he trabajado principalmente en Linux en el pasado. Si todavía puedo hacer uso de las DLL que componen esta API, imagino que sería posible convertir mi proyecto. - Travis

@Travis: Va a tener dificultades extraordinarias para adaptarse a la programación de Windows siempre que continúe combinando código administrado y no administrado. Son bestias completamente diferentes, generalmente incompatibles. Realmente te conviene empezar a pensar en ellos como completamente diferentes. Debido a que tienes que saltar a través de aros para mezclarlos, este es un esfuerzo algo avanzado que es mejor reservar para alguien con familiaridad con al menos uno de ellos. :-) Solo para mayor claridad, C ++ / CLI es un conjunto de extensiones del lenguaje C ++ proporcionado por Microsoft para la interoperabilidad con código nativo y .NET. - Cody Grey

P / invoke realmente no es una opción si la interfaz de la biblioteca usa características de C ++ - Ben Voigt

Los chicos mono de hecho desarrollan algo diferente de P / Invoke o C ++ / CLR y pueden ser más amigables para los desarrolladores de C #,

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

La pregunta es qué tan maduro es ahora, pero puedes jugar con él y aprender,

https://github.com/mono/cxxi

Respondido 01 Feb 12, 09:02

Gracias por mencionar esto. Lo investigaré, ya que ciertamente parece prometedor. - Travis

No estoy seguro, puede que esta herramienta te ayude - trago

Respondido 01 Feb 12, 07:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.