Maison > développement back-end > C++ > Comment puis-je accéder aux classes C à partir de C# à l'aide de P/Invoke ?

Comment puis-je accéder aux classes C à partir de C# à l'aide de P/Invoke ?

Linda Hamilton
Libérer: 2025-01-05 02:42:38
original
176 Les gens l'ont consulté

How Can I Access C   Classes from C# Using P/Invoke?

Accès aux classes C dans le code C# via une DLL

Lors de l'interface avec une DLL C à partir du code C#, des limitations surviennent lors de la tentative d'accès direct aux classes défini dans la DLL. Malgré la capacité de P/Invoke à exposer des fonctions, les fonctions au sein des classes s'appuient sur des variables membres non statiques, nécessitant la création d'instances.

P/Invoke et accès indirect

Bien que direct l'accès à la classe n'est pas réalisable, P/Invoke peut être utilisé indirectement pour accéder aux membres de la classe. L'approche consiste à créer des fonctions non membres qui appellent les fonctions membres de la classe.

Exemple de code

Considérez le code C suivant :

class Foo {
public:
  int Bar();
};

extern "C" Foo* Foo_Create() { return new Foo(); }
extern "C" int Foo_Bar(Foo* pFoo) { return pFoo->Bar(); }
extern "C" void Foo_Delete(Foo* pFoo) { delete pFoo; }
Copier après la connexion

Ici, le code C expose la classe Foo via des fonctions non membres.

C# Interfaçage

En C#, P/Invoke peut accéder à ces fonctions :

[DllImport("Foo.dll")]
public static extern IntPtr Foo_Create();

[DllImport("Foo.dll")]
public static extern int Foo_Bar(IntPtr value);

[DllImport("Foo.dll")]
public static extern void Foo_Delete(IntPtr value);
Copier après la connexion

Le code C# doit désormais gérer les valeurs IntPtr, qui peuvent être encapsulées dans une classe wrapper pour plus de commodité.

Approche alternative

Si la propriété directe du code C n'est pas possible, une DLL distincte peut être créée pour envelopper la DLL d'origine et fournir une couche P/Invoke, simplifiant ainsi l'interaction du code C# avec la classe C.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal