2010-05-23 12 views
5
  • Me preguntaba si puedo usar a library - escrito en C++ - en C#
  • El problema es que la biblioteca tiene sus propias estructuras y clases .. voy a ser capaz de usarlo en C#?

GraciasC# y C++ Library

EDIT
Esta biblioteca es de código abierto ..
así que si mis requerimientos necesita algo especial en código C++, voy a ser capaz de hacerlo ...

Respuesta

3

No puede usar directamente las clases de C++ en el código administrado. Los principales problemas no son poder utilizar el mismo asignador de memoria que usa el código C++ y no poder invocar el constructor y el destructor fácilmente. Un empleado de Microsoft publicó a blog post para demostrar que no es imposible. No recomendaría hacer esto.

COM es una solución pero que invariablemente requiere una reescritura bastante grande y una buena habilidad de programación COM. Un managed class wrapper en el lenguaje C++/CLI suele ser la mejor solución. Puede echar un vistazo al SWIG tool para considerar la generación automática de esas clases contenedoras. Sin embargo, tenga en cuenta que esta herramienta puede crear fácilmente más problemas de los que resuelve.

3

Hay dos maneras, tanto utilizando un adaptador (que se asigna clases de C++ para clases .NET):

  • C++/CLI
  • COM

Los ex evita ir a través de COM, y gran parte del código C++ podría ser capaz de ser justo compilado con los interruptores correctos.

adicional: En teoría P/Invoke podría ser posible, pero todos semántica el C++ se perdería, lo que se necesita para manejar C++ duración del objeto manualmente (y las referencias de instancia como IntPtr). Además, por supuesto, debería llamar a los nombres destrozados ...

3

Otra opción es escribir un contenedor administrado en C++/CLI. Prefiero eso en lugar de usar P/Invoke.