Gewusst wie: Erstellen und Verwenden von C#-DLLs (C#-Programmierhandbuch)

Aktualisiert: November 2007

Zur Laufzeit ist das Programm mit einer Dynamic Linking Library (DLL) verknüpft. Um die Erstellung und Verwendung einer DLL zu veranschaulichen, wird folgendes Szenario verwendet:

  • MathLibrary.DLL: Die Bibliotheksdatei, die die zur Laufzeit aufzurufenden Methoden enthält. In diesem Beispiel enthält die DLL zwei Methoden: Add und Multiply.

  • Add.cs: Die Quelldatei, die die Add(long i, long j)-Methode enthält. Sie gibt die Summe ihrer Parameter zurück. Die AddClass-Klasse, die die Add-Methode enthält, ist ein Member des UtilityMethods-Namespaces.

  • Mult.cs: Der Quellcode, der die Multiply(long x, long y)-Methode enthält. Er gibt das Produkt seiner Parameter zurück. Die MultiplyClass-Klasse, die die Multiply-Methode enthält, ist ebenfalls ein Member des UtilityMethods-Namespaces.

  • TestCode.cs: Die Datei, die die Main-Methode enthält. Sie verwendet die Methoden in der DLL-Datei, um die Summe und das Produkt der Laufzeitargumente zu berechnen.

Beispiel

// File: Add.cs 
namespace UtilityMethods
{
    public class AddClass 
    {
        public static long Add(long i, long j) 
        { 
            return (i + j);
        }
    }
}
// File: Mult.cs
namespace UtilityMethods 
{
    public class MultiplyClass
    {
        public static long Multiply(long x, long y) 
        {
            return (x * y); 
        }
    }
}
// File: TestCode.cs

using UtilityMethods;

class TestCode
{
    static void Main(string[] args) 
    {
        System.Console.WriteLine("Calling methods from MathLibrary.DLL:");

        if (args.Length != 2)
        {
            System.Console.WriteLine("Usage: TestCode <num1> <num2>");
            return;
        }

        long num1 = long.Parse(args[0]);
        long num2 = long.Parse(args[1]);

        long sum = AddClass.Add(num1, num2);
        long product = MultiplyClass.Multiply(num1, num2);

        System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
        System.Console.WriteLine("{0} * {1} = {2}", num1, num2, product);
    }
}
/* Output (assuming 1234 and 5678 are entered as command line args):
    Calling methods from MathLibrary.DLL:
    1234 + 5678 = 6912
    1234 * 5678 = 7006652        
*/

Diese Datei enthält den Algorithmus, der die DLL-Methoden Add und Multiply verwendet. Er beginnt mit der Analyse der Argumente num1 und num2, die aus der Befehlszeile stammen. Anschließend wird die Summe berechnet, indem die Add-Methode auf die AddClass-Klasse angewendet wird, und dann das Produkt, indem die Multiply-Methode auf die MultiplyClass-Klasse angewendet wird.

Durch die using-Direktive am Anfang der Datei können Sie während der Kompilierungszeit die nicht qualifizierten Klassennamen als Referenz auf die DLL-Methoden folgendermaßen verwenden:

MultiplyClass.Multiply(num1, num2);

Andernfalls müssen Sie die vollqualifizierten Namen wie folgt verwenden:

UtilityMethods.MultiplyClass.Multiply(num1, num2);

Ausführung

Um das Programm auszuführen, geben Sie den Namen der EXE-Datei, gefolgt von zwei Zahlen, folgendermaßen ein:

TestCode 1234 5678

Kompilieren des Codes

Um die Datei MathLibrary.DLL zu erstellen, kompilieren Sie die beiden Dateien Add.cs und Mult.cs mit folgender Befehlszeile:

csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs

Mit der /target:library-Compileroption wird der Compiler angewiesen, eine DLL-Datei statt einer EXE-Datei auszugeben. Die /out-Compileroption, gefolgt von einem Dateinamen, wird zur Angabe des Namens der DLL-Datei verwendet. Andernfalls wird vom Compiler die erste Datei (Add.cs) als Name der DLL verwendet.

Zum Erstellen der ausführbaren Datei TestCode.exe verwenden Sie die folgende Befehlszeile:

csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs

Mit der /out-Compileroption wird der Compiler angewiesen, eine EXE-Datei auszugeben, und der Name der Ausgabedatei (TestCode.exe) wird festgelegt. Diese Compileroption kann optional verwendet werden. Mit der /reference-Compileroption werden die DLL-Dateien festgelegt, die von diesem Programm verwendet werden.

Siehe auch

Aufgaben

Gewusst wie: Angeben einer Basisadresse für eine DLL

Konzepte

C#-Programmierhandbuch

Erstellen einer Klasse zum Halten von DLL-Funktionen