Est-il possible d'appeler du code C ++, éventuellement compilé sous forme de fichier de bibliothèque de code (.dll), à partir d'un langage .NET tel que C #?
Plus précisément, du code C ++ tel que la bibliothèque réseau RakNet.
Est-il possible d'appeler du code C ++, éventuellement compilé sous forme de fichier de bibliothèque de code (.dll), à partir d'un langage .NET tel que C #?
Plus précisément, du code C ++ tel que la bibliothèque réseau RakNet.
Réponses:
Un moyen simple d'appeler en C ++ consiste à créer un assembly wrapper en C ++ / CLI. En C ++ / CLI, vous pouvez appeler du code non managé comme si vous écriviez du code natif, mais vous pouvez appeler du code C ++ / CLI à partir de C # comme s'il était écrit en C #. Le langage a été essentiellement conçu avec l'interopérabilité dans les bibliothèques existantes comme son "application tueur".
Par exemple - compilez ceci avec le commutateur / clr
#include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
};
Ensuite, en C #, ajoutez une référence à votre assembly ManagedType et utilisez-la comme ceci:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
Consultez ce billet de blog pour un exemple plus expliqué.
Je ne connais pas la bibliothèque que vous avez mentionnée, mais en général, il y a plusieurs façons de le faire:
P / Invoke est une technologie intéressante, et cela fonctionne assez bien, sauf pour des problèmes de chargement du fichier DLL cible. Nous avons constaté que la meilleure façon de faire les choses est de créer une bibliothèque statique de fonctions natives et de la lier à un projet C ++ géré (ou C ++ / CLI) qui en dépend.
Oui, cela s'appelle P / Invoke .
Voici un excellent site de ressources pour l'utiliser avec l'API Win32:
Bien sûr. Cet article est un bon exemple de ce que vous pouvez faire pour commencer.
Nous faisons cela à partir de C # sur nos appareils Windows Mobile en utilisant P / Invoke .
La technologie utilisée pour ce faire est appelée P / Invoke ; vous pouvez rechercher des articles sur le sujet. Notez que c'est pour appeler C à partir de C #, pas tellement C ++. Vous devrez donc envelopper votre code C ++ dans un wrapper C que votre DLL exporte.
Avez-vous envisagé Apache Thrift?
Cela semble être une solution très très soignée.