NetDllExport

Exportiert statische Methoden in einer verwalteten DLL als Bibliotheksfunktionen, die aus einer unverwalteten Windows-Anwendung aufgerufen werden können.

Archivierter Inhalt: Diese Anwendung ist derzeit inaktiv und möglicherweise veraltet, nicht mehr gewartet oder funktioniert nicht mehr.

Es funktioniert tatsächlich: Die sonst so eigene .NET-Welt erlaubt den direkten Aufruf von verwalteten Funktionen aus unverwalteten Anwendungen. Gemeint ist z. B. eine in C# programmierte Klassenbibliothek (DLL), deren Funktionen ohne Zuhilfenahme von COM aus nativen C++-, Delphi- oder VB-Programmen aufgerufen werden können wie bei jeder anderen DLL auch. Das ermöglicht es, DLLs für unverwaltete Programme in C# zu programmieren, oder C#-Code für native Anwendungen zugänglich zu machen.

Der Trick funktioniert durch eine Veränderung des IL-Codes der .NET-DLL. Denn eigentlich sieht .NET es schon vor, dass beim Laden der DLL aus einer unverwalteten Umgebung die CLR hochgefahren wird. Es gibt nur keinen zugänglichen Schalter dafür. Deshalb wäre zunächst Handarbeit angesagt. Die kompilierte DLL muss mit dem IL-Disassembler ildasm (Teil des Windows-SDKs) in IL-Code umgewandelt werden, dann müssen an einigen Stellen ein paar Änderungen vorgenommen werden und letztlich wird die DLL mit ilasm wieder assembliert. Da diese Arbeit nach jedem Build wiederholt werden muss, habe ich mir für ein Projekt dieses Hilfsprogramm geschrieben, das die Arbeit schneller macht.

Beim einfachen Aufruf von NetDllExport.exe mit dem Dateinamen der zu verarbeitenden DLL-Datei werden alle öffentlichen statischen Methoden der Klasse DllExport unter ihrem Funktionsnamen exportiert und die neue DLL unter dem gleichen Namen wieder gespeichert. Weitere Optionen wie das Ändern des Klassennamens, der Ausgabedatei oder ein Debug-Build sind durch weitere Kommandozeilenparameter verfügbar. Eine Übersicht wird mit NetDllExport --help angezeigt.

In einem CodeProject-Artikel werden die Hintergründe genauer beschrieben. Im Gegensatz zur dort vorgestellten Lösung werden mit NetDllExport keine zusätzlichen Referenzen oder Attribut-Definitionen benötigt, da einfach alle öffentlichen statischen Methoden der angegebenen Klasse exportiert werden.

Kompatibilität: .NET Version 2.0 Windows 10 Windows 8 Windows 7 Windows XP

Ein ähnliches Programm, das ich gefunden habe, ist das NuGet-Paket Unmanaged Exports (DllExport for .Net) (unterstützt auch die x64-Plattform).

Download

NetDllExport.exe20,0 KiBProgrammdatei, Version 1.3, .NET 4.0

master.zipAktueller Quelltext direkt von GitHub

Vorherige Versionen

Es gibt ein öffentliches Git-Repository von NetDllExport bei GitHub.

Hinweise zur Verwendung

NetDllExport wurde bislang nur mit DLLs für das Framework 4.0 (Visual Studio 2010) und nur für 32-Bit-DLLs getestet. Unterstützung für 64-Bit-DLLs muss noch im Quelltext durch Anpassung der .corflags hinzugefügt werden. Die ältere Version 1.2.1 unterstützt nur .NET 2.0 (Visual Studio 2005), das ab Version 1.3 mangels Testumgebung nicht mehr berücksichtigt wird.

Die verarbeitete DLL kann derzeit für x86 oder Any CPU übersetzt werden. NetDllExport ändert diese Einstellung immer auf x86.

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der vereinfachten BSD-Lizenz veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download.

Statistische Daten

  • Erstellt am 2010-04-05, aktualisiert am 2016-02-22.
  • Ca. 290 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 290 - 1 200 €