sirve que programas para lenguaje historia ejemplos comandos caracteristicas c# .net c++ unmanaged managed

c# - que - lenguaje c++ pdf



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

¿Es posible llamar al código C ++, posiblemente compilado 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.



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.


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

  • P/Invoke 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.



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 .


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, compilar 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.