Comment appeler une bibliothèque C# à partir de C natif à l'aide d'IJW
Contexte :
Le besoin se fait sentir d'intégrer un C# bibliothèque en code C non géré. Parmi les méthodes disponibles, Interlace Services utilisant C/CLI et IJW (Interoperability with JavaScript and Windows Runtime) semble prometteuse.
Question :
-
Avantages d'IJW : IJW offre-t-il des avantages par rapport aux objets com ou PInvoke ?
-
Wrapper C/CLR :Comment pouvez-vous créer un wrapper C/CLR qui utilise IJW pour appeler une bibliothèque C# ?
-
Intégration C native : Comment connecter un fichier C non géré avec un C/CLR bibliothèque ?
Réponse :
1. Avantages d'IJW par rapport aux objets COM et à PInvoke :
- IJW simplifie le processus de transmission et de récupération de données entre le code géré et non géré.
- Il élimine le besoin de marshaling manuel et conversion de données.
2. Création d'un wrapper C/CLR avec IJW :
-
Créez une nouvelle classe C/CLI : Ajoutez une classe C/CLI à votre projet et nommez-la en conséquence.
-
Activer le support CLR : Faites un clic droit sur le fichier .cpp de la nouvelle classe et activez /clr dans les propriétés du projet.
-
Ajouter des références d'espace de noms : Utilisez la propriété "Répertoires #using supplémentaires" pour ajouter une référence à l'emplacement de votre DLL C#.
3. Intégration C native :
-
Inclure l'en-tête C/CLR : Dans le fichier C non géré, incluez le fichier d'en-tête généré par la classe wrapper C/CLR.
-
Créer une instance de la classe Wrapper : Utilisez le constructeur de la classe wrapper pour instancier un objet.
-
Appeler des méthodes gérées : Accédez aux méthodes gérées de la bibliothèque C# via l'objet de classe wrapper.
Exemple Code :
Native.h :
void NativeWrapMethod();
Native.cpp :
#using "mscorlib.dll"
#using "MyNet.dll"
using namespace MyNetNameSpace;
void NativeWrapMethod()
{
MyNetNameSpace::MyManagedClass::Method(); // static method
}
Ce Cette approche vous permet d'appeler une classe C# gérée et ses méthodes à partir du code C natif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn