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.
Sí, se llama P/Invoke .
Este es un excelente sitio de recursos para usarlo con la API de Win32:
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.