94 votes

Est-il possible d'appeler du code C++ à partir de C# ?

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 de mise en réseau RakNet.

97voto

Eclipse Points 27662

Une façon simple de faire appel à C++ est de créer une assemblée wrapper dans C++/CLI. Dans C++/CLI, vous pouvez faire appel à du code non géré comme si vous écriviez du code natif, mais vous pouvez faire appel à du code C++/CLI depuis C# comme s'il était écrit en C#. Le langage a été conçu pour que l'interopérabilité avec les bibliothèques existantes soit sa "killer app".

Par exemple - compiler 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 assemblage ManagedType, et utilisez-le comme suit :

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

Vérifiez cet article de blog pour un exemple plus expliqué.

10voto

plinth Points 26817

P/Invoke est une technologie intéressante, qui fonctionne assez bien, à l'exception des problèmes de chargement du fichier DLL cible. Nous avons constaté que la meilleure façon de procéder est de créer une bibliothèque statique de fonctions natives et de la lier à un projet Managed C++ (ou C++/CLI) qui en dépend.

9voto

Mehrdad Afshari Points 204872

Je ne connais pas la bibliothèque que vous avez mentionnée, mais en général, il y a plusieurs façons de procéder :

  • P/Invocation aux fonctions de bibliothèque exportées
  • Ajout d'une référence à la bibliothèque de types COM (au cas où vous auriez affaire à des objets COM).

5voto

Dana Holt Points 7150

Oui, il s'appelle P/Invocation .

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

http://www.pinvoke.net/

2voto

Mat Nadrofsky Points 5261

C'est 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/Invocation .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X