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

Comment puis-je accéder aux classes C à partir de C# à l'aide de l'intégration DLL ?

Mary-Kate Olsen
Libérer: 2025-01-01 14:23:09
original
759 Les gens l'ont consulté

How Can I Access C   Classes from C# Using DLL Integration?

Accès aux classes C dans le code C# via l'intégration de DLL

Lors de l'intégration du code C# avec une DLL C préexistante, l'accès aux classes définies dans le Les DLL peuvent présenter un défi. Bien que P/Invoke vous permette d'interfacer avec les fonctions de la DLL, il ne prend naturellement pas en charge l'accès aux classes.

Pour surmonter cette limitation, vous pouvez utiliser une approche P/Invoke indirecte. Cela implique de créer des fonctions non membres pour chaque fonction membre de la classe cible qui encapsule l'appel de la fonction membre.

Par exemple, considérons une classe C Foo avec une fonction membre Bar():

class Foo {
public:
  int Bar();
};
Copier après la connexion

Pour accéder à Foo en C#, vous devez créer trois fonctions externes :

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

En C#, ces fonctions peuvent être P/Invoked :

[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

Bien que cette approche donne accès à la classe C, elle introduit un IntPtr opaque que vous devez gérer. Pour créer une interface plus conviviale, vous pouvez créer une classe wrapper C# autour de ce pointeur, encapsulant les opérations nécessaires.

Même si vous n'avez pas d'accès direct au code C, vous pouvez toujours créer une classe distincte DLL qui enveloppe la DLL d'origine, fournissant une couche P/Invoke et exposant une interface plus adaptée au code 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