¿Es posible llamar al código C ++ desde C #?

¿Es posible llamar al código C ++, posiblemente comstackdo como un archivo de biblioteca de código (.dll), desde un lenguaje .NET como C #?

Específicamente, código C ++ como la biblioteca de red RakNet.

Una manera fácil de llamar a C ++ es crear un ensamblado de envoltura en C ++ / CLI. En C ++ / CLI puede llamar al código no administrado como si estuviera escribiendo código nativo, pero puede llamar al código C ++ / CLI desde C # como si estuviera escrito en C #. El lenguaje fue diseñado básicamente con la interoperabilidad en las bibliotecas existentes como su “aplicación asesina”.

Por ejemplo, comstackr esto con el modificador / clr

#include "NativeType.h" public ref class ManagedType { NativeType* NativePtr; public: ManagedType() : NativePtr(new NativeType()) {} ~ManagedType() { delete NativePtr; } void ManagedMethod() { NativePtr->NativeMethod(); } }; 

Luego, en C #, agregue una referencia a su conjunto de ManagedType y úselo de la siguiente manera:

 ManagedType mt = new ManagedType(); mt.ManagedMethod(); 

Echa un vistazo a esta publicación de blog para un ejemplo más explicado.

No estoy familiarizado con la biblioteca que mencionaste, pero en general hay varias maneras de hacerlo:

  • P / invocar a funciones de biblioteca exportadas
  • Agregar una referencia a la biblioteca de tipo COM (en caso de que esté tratando con objetos COM).

P / Invoke es una buena tecnología, y funciona bastante bien, excepto por problemas al cargar el archivo DLL de destino. Descubrimos que la mejor manera de hacer las cosas es crear una biblioteca estática de funciones nativas y vincular eso en un proyecto de C ++ administrado (o C ++ / CLI) que dependa de él.

Sí, se llama P / Invoke .

Este es un excelente sitio de recursos para usarlo con la API de Win32:

http://www.pinvoke.net/

Seguro es. Este artículo es un buen ejemplo de algo que puede hacer para comenzar con esto.

Hacemos esto desde C # en nuestros dispositivos Windows Mobile usando P / Invoke .

La tecnología utilizada para hacer esto se llama P / Invoke ; puedes buscar artículos sobre el tema. Tenga en cuenta que es para llamar a C desde C #, no tanto a C ++. Por lo tanto, deberá ajustar su código C ++ en un contenedor C exportado por el archivo DLL.

¿Has considerado Apache Thrift?

http://thrift.apache.org/

Parece una solución muy muy buena.