Question

Est-il possible d'appeler le code C ++, peut-être compilé en tant que fichier de bibliothèque de code (.dll), à partir d'un langage .NET, comme C #?

Plus précisément, le code C ++ comme la bibliothèque réseau de RakNet.

Était-ce utile?

La solution

Un moyen facile d'appeler en C ++ est de créer un ensemble d'emballage en C ++ / CLI. En C ++ / CLI vous pouvez appeler dans le code non géré comme si vous étiez en train d'écrire du code natif, mais vous pouvez appeler en code C ++ / CLI de C # comme si elle avait été écrite en C #. La langue a été essentiellement conçu avec Interop dans les bibliothèques existantes comme son « killer app ».

Par exemple - compiler ce 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 ensemble ManagedType, et l'utiliser comme ceci:

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

Consultez ce billet de blog pour un exemple plus expliqué.

Autres conseils

Je ne suis pas au courant de la bibliothèque que vous avez mentionné, mais en général il y a deux manières de le faire:

  • P / Invoke aux fonctions de bibliothèque exportées
  • Ajout d'une référence à la bibliothèque de type COM (dans le cas où vous traitez avec des objets COM).

P / Invoke est une technologie bien, et cela fonctionne assez bien, sauf pour les questions 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 des fonctions natives et un lien qui en Managed C ++ (ou C ++ / CLI) projet qui en dépend.

Oui, il est appelé P / Invoke .

Voici un site de ressources pour l'utiliser avec l'API Win32:

http://www.pinvoke.net/

Bien sûr est. Cet article est un bon exemple de quelque chose que vous pouvez faire pour Pour commencer à ce sujet.

Nous le faisons à partir de C # sur nos appareils Windows Mobile en utilisant P / Invoke .

La technologie utilisée pour ce faire est appelé P / Invoke ; vous pouvez rechercher des articles sur le sujet. Notez qu'il est pour appeler C de C #, pas tellement C ++. Vous aurez donc besoin d'envelopper votre code C ++ dans un emballage C que vos exportations DLL.

Avez-vous envisagé Apache Thrift?

http://thrift.apache.org/

Il semble comme une solution très très propre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top