Maison > développement back-end > C++ > Comment puis-je accéder à une classe DLL C avec des variables membres et des méthodes non statiques à partir de C# ?

Comment puis-je accéder à une classe DLL C avec des variables membres et des méthodes non statiques à partir de C# ?

Patricia Arquette
Libérer: 2024-12-28 21:49:11
original
167 Les gens l'ont consulté

How Can I Access a C   DLL Class with Member Variables and Non-Static Methods from C#?

Accès à une classe DLL C en code C#

Problème :

Utilisation de P/Invoke pour accéder aux fonctions dans un C La DLL avec des variables membres et des méthodes non statiques nécessite la création d'instances de la classe de définition. Comment accéder à cette classe ?

Réponse :

L'utilisation directe d'une classe C en C# n'est pas possible. Suivez plutôt ces étapes :

  1. Créez des fonctions non membres pour chaque fonction membre de la classe, en appelant les fonctions membres.
  2. Utilisez P/Invoke pour exposer ces fonctions non membres à C#.

Exemple :

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

Dans C# :

[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

Classe Wrapper :

Pour simplifier l'utilisation, enveloppez le pointeur IntPtr dans une classe wrapper C# :

public class FooWrapper
{
  private IntPtr _foo;

  public FooWrapper()
  {
    _foo = Foo_Create();
  }

  public int Bar()
  {
    return Foo_Bar(_foo);
  }

  public void Dispose()
  {
    Foo_Delete(_foo);
  }
}
Copier après la connexion

Approche alternative :

Si vous ne parvenez pas à modifier la DLL d'origine, créez un DLL intermédiaire qui encapsule la DLL d'origine et expose la classe encapsulée en 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