40 Stimmen

Ist es möglich, Funktionen aus einer C# DLL wie in VS C++ zu exportieren?

Im VS C/C++ könnten Sie extern "C" __declspec(dllexport) -Funktionsdeklaration- verwenden.

Wie erreiche ich das in einer C#-DLL? Gibt es einen C#-Code, der dem obigen Code entspricht?

Bearbeiten: Weitere Informationen

Ich versuche ein Add-In für Notepad++ zu erstellen und möchte C# verwenden, aber der übliche Weg, den ich bisher gesehen habe, besteht darin, Legacy-C++-Code mit dem obigen Aufruf zu verwenden, um einige der Funktionen zu exportieren, die Notepad++ erwartet zu importieren und aufzurufen. Es gibt eine Beispiel-App mit C#, aber dies erfordert immer noch eine Loader-DLL, was ich aus den Kommentaren/Antworten unten schließe, die einzige Möglichkeit für C# ist.

38voto

hB0 Punkte 1912

Unmanaged Exports => https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

DLLExport => https://github.com/3F/DllExport

Wie funktioniert das?

Erstellen Sie eine neue Klassibibliothek oder fahren Sie mit einer vorhandenen fort. Fügen Sie dann das UnmanagedExports Nuget-Paket hinzu.

Das ist im Grunde alles, was eingerichtet werden muss.

Jetzt können Sie jede Art von statischer Methode schreiben, sie mit [DllExport] dekorieren und sie aus dem nativen Code verwenden.
Es funktioniert genauso wie DllImport, sodass Sie das Marshalling von Parametern/Ergebnissen mit MarshalAsAttribute anpassen können.

Während des Kompilierungsvorgangs wird meine Aufgabe den IL ändern, um die erforderlichen Exporte hinzuzufügen...

20voto

Ben Voigt Punkte 268424

Ich habe gesehen, dass Leute das zuvor gemacht haben, aber es erforderte ildasm, das Hinzufügen der MSIL .export-Direktive und dann das Wiederzusammenstellen. Ein Programm namens dll_tool kann diese Schritte für Sie durchführen.

Wenn Sie eine DLL im Mixed-Mode mit sowohl nativen als auch verwalteten Exports erstellen möchten, sollten Sie C++/CLI verwenden, das speziell für diesen Zweck entwickelt wurde.

9voto

Patrick White Punkte 231

Ja, es ist möglich, Funktionen aus einer C#-DLL fast genauso wie in C++ zu exportieren! Sie benötigen etwas Unterstützung von einem Add-In Unmanaged Exports (DllExport für .Net), das diesen Prozess erleichtert, oder von einer ähnlichen Methode wie Funktionen in C#/VB.NET in nativen Code exportieren.

Bitte sehen Sie sich Code zum Exportieren einer C#-DLL nach Metatrader Build 600+ für ein funktionierendes Beispiel unter Verwendung von Robert Gieseckes C#-Projektvorlage für Unmanaged Exports zum Exportieren einer C#-DLL in eine Legacy-Anwendung (Metatrader) an, die große Ähnlichkeiten mit C++ hat.

Zusätzlich finden Sie möglicherweise Native und .NET-Interoperabilität interessant, obwohl es hauptsächlich darauf abzielt, auf nativen Code von innerhalb von .NET aus zuzugreifen, anstatt andersherum.

3voto

Nawaz Punkte 339767

Nein, das kannst du nicht in demselben Sinne tun wie in C und C++.

Aber du kannst eine COM-API erstellen, um das zu erreichen, was du dann in C und C++-Code verwenden kannst.

Siehe diese Artikel

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X