Практическое руководство. Создание и использование библиотек DLL на языке C# (Руководство по программированию на C#)
Обновлен: Ноябрь 2007
Библиотека динамической компоновки (DLL) связывается с программой во время выполнения. Построение и использование библиотеки DLL рассматривается в следующем сценарии:
MathLibrary.DLL: Файл библиотеки с методами, вызываемыми во время выполнения. В этом примере библиотека DLL содержит два метода: Add и Multiply.
Add.cs: Исходный файл с методом Add(long i, long j). Он возвращает сумму своих параметров. Класс AddClass с методом Add является членом пространства имен UtilityMethods.
Mult.cs: Исходный код, содержащий метод Multiply(long x, long y). Он возвращает результат своих параметров. Класс MultiplyClass с методом Multiply также является членом пространства имен UtilityMethods.
TestCode.cs: Файл с методом Main. Он использует методы в DLL-файле для вычисления суммы и результата аргументов времени выполнения.
Пример
// 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
*/
Этот файл содержит алгоритм, использующий методы DLL Add и Multiply. Алгоритм начинается с разбора аргументов, введенных из командной строки, num1 и num2. Затем, он вычисляет сумму при помощи метода Add в классе AddClass, и результат при помощи метода Multiply в классе MultiplyClass.
Следует отметить, что директива using в начале файла позволяет использовать неполные имена классов для ссылки на методы DLL во время выполнения (см. ниже).
MultiplyClass.Multiply(num1, num2);
В противном случае, потребуется использовать полные имена, как показано ниже.
UtilityMethods.MultiplyClass.Multiply(num1, num2);
Выполнение
Для запуска программы введите имя EXE-файла и два числа, как показано далее.
TestCode 1234 5678
Компиляция кода
Чтобы построить файл MathLibrary.DLL, скомпилируйте два файла Add.cs и Mult.cs при помощи следующей сроки команд:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs
Параметр компилятора /target:library указывает компилятору создавать библиотеку DLL, вместо файла EXE. Параметр компилятора /out с именем файла используется для указания имени DLL-файла. В противном случае, компилятор использует первый файл (Add.cs) в качестве имени библиотеки DLL.
Для построения исполняемого файла TestCode.exe служит следующая строка команд:
csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs
Параметр компилятора /out указывает компилятору создавать EXE-файл и задает имя выходного файла (TestCode.exe). Этот параметр компилятора является необязательным. Параметр компилятора /reference указывает DLL-файл или файлы, используемые этой программой.
См. также
Задачи
Практическое руководство. Назначение базового адреса DLL