Heim > Backend-Entwicklung > C++ > Wie kann ich mithilfe der DLL-Integration von C# aus auf C-Klassen zugreifen?

Wie kann ich mithilfe der DLL-Integration von C# aus auf C-Klassen zugreifen?

Mary-Kate Olsen
Freigeben: 2025-01-01 14:23:09
Original
753 Leute haben es durchsucht

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

Zugriff auf C-Klassen in C#-Code über DLL-Integration

Bei der Integration von C#-Code in eine bereits vorhandene C-DLL wird der Zugriff auf in der definierte Klassen DLL kann eine Herausforderung darstellen. Während P/Invoke Ihnen die Schnittstelle zu Funktionen in der DLL ermöglicht, unterstützt es natürlich nicht den Zugriff auf Klassen.

Um diese Einschränkung zu überwinden, können Sie einen indirekten P/Invoke-Ansatz verwenden. Dazu gehört das Erstellen von Nicht-Member-Funktionen für jede Member-Funktion der Zielklasse, die den Member-Funktionsaufruf umschließt.

Betrachten Sie beispielsweise eine C-Klasse Foo mit einer Member-Funktion Bar():

class Foo {
public:
  int Bar();
};
Nach dem Login kopieren

Um in C# auf Foo zuzugreifen, würden Sie drei externe Funktionen erstellen:

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; }
Nach dem Login kopieren

In C# können diese Funktionen sein 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);
Nach dem Login kopieren

Dieser Ansatz bietet zwar Zugriff auf die C-Klasse, führt jedoch einen undurchsichtigen IntPtr ein, den Sie verwalten müssen. Um eine benutzerfreundlichere Schnittstelle zu erstellen, können Sie um diesen Zeiger herum eine C#-Wrapper-Klasse erstellen, die die notwendigen Vorgänge kapselt.

Auch wenn Sie keinen direkten Zugriff auf den C-Code haben, können Sie dennoch eine separate Klasse erstellen DLL, die die ursprüngliche DLL umschließt, eine P/Invoke-Ebene bereitstellt und eine Schnittstelle verfügbar macht, die besser für C#-Code geeignet ist.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe der DLL-Integration von C# aus auf C-Klassen zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage