¿Es posible llamar al código C++, posiblemente compilado como un archivo de biblioteca de código (.dll), desde un lenguaje .NET como C#?¿Es posible llamar al código C++ desde C#?
Específicamente, código C++ como la biblioteca de red RakNet.
¿Es posible llamar al código C++, posiblemente compilado como un archivo de biblioteca de código (.dll), desde un lenguaje .NET como C#?¿Es posible llamar al código C++ desde C#?
Específicamente, código C++ como la biblioteca de red RakNet.
Una manera fácil de llamar a C++ es crear un ensamblado contenedor 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 este 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 al ensamblado ManagedType, y usarlo de esta manera:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
Salida this blog post de un ejemplo más explicado.
Sure is. This article 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.
No estoy familiarizado con la biblioteca que usted ha mencionado, pero en general hay un par de maneras de hacerlo:
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.
Sí, se llama P/Invoke.
Aquí es un gran sitio de recursos para usarlo con la API de Win32:
P/Invoke es una buena tecnología, y funciona bastante bien, excepto por los problemas en 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.
Tuve problemas con las devoluciones de llamada y p/invoke. El cambio a C++/CLI ha abordado estos problemas. – MedicineMan