Поделиться через


Практическое руководство. Создание и использование сборок с помощью командной строки (C# и Visual Basic)

Сборка (или библиотека динамической компоновки (DLL)) связывается с программой во время выполнения. Построение и использование библиотеки DLL рассматривается в следующем сценарии:

  • MathLibrary.DLL: Файл библиотеки с методами, вызываемыми во время выполнения. В этом примере библиотека DLL содержит два метода: Add и Multiply.

  • Add: Исходный файл с методом Add. Он возвращает сумму своих параметров. Класс AddClass с методом Add является членом пространства имен UtilityMethods.

  • Mult: Исходный код, содержащий метод Multiply. Он возвращает результат своих параметров. Класс MultiplyClass с методом Multiply также является членом пространства имен UtilityMethods.

  • TestCode: Файл с методом Main. Он использует методы в DLL-файле для вычисления суммы и результата аргументов времени выполнения.

Пример

' File: Add.vb 
Namespace UtilityMethods
    Public Class AddClass
        Public Shared Function Add(ByVal i As Long, ByVal j As Long) As Long
            Return i + j
        End Function
    End Class
End Namespace


...


' File: Mult.vb
Namespace UtilityMethods
    Public Class MultiplyClass
        Public Shared Function Multiply(ByVal x As Long, ByVal y As Long) As Long
            Return x * y
        End Function
    End Class
End Namespace


...


' File: TestCode.vb

Imports UtilityMethods

Module Test

    Sub Main(ByVal args As String())


        System.Console.WriteLine("Calling methods from MathLibrary.DLL:")

        If args.Length <> 2 Then
            System.Console.WriteLine("Usage: TestCode <num1> <num2>")
            Return
        End If

        Dim num1 As Long = Long.Parse(args(0))
        Dim num2 As Long = Long.Parse(args(1))

        Dim sum As Long = AddClass.Add(num1, num2)
        Dim product As Long = MultiplyClass.Multiply(num1, num2)

        System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum)
        System.Console.WriteLine("{0} * {1} = {2}", num1, num2, product)

    End Sub

End Module

' Output (assuming 1234 and 5678 are entered as command-line arguments):
' Calling methods from MathLibrary.DLL:
' 1234 + 5678 = 6912
' 1234 * 5678 = 7006652        

// 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 arguments):
    Calling methods from MathLibrary.DLL:
    1234 + 5678 = 6912
    1234 * 5678 = 7006652        
*/

Этот файл содержит алгоритм, использующий методы DLL Add и Multiply. Алгоритм начинается с разбора аргументов, введенных из командной строки, num1 и num2. Затем, он вычисляет сумму при помощи метода Add в классе AddClass, и результат при помощи метода Multiply в классе MultiplyClass.

Следует отметить, что директива using (Imports в Visual Basic) в начале файла позволяет использовать неполные имена классов для ссылки на методы DLL во время компиляции, как показано ниже.

MultiplyClass.Multiply(num1, num2)
MultiplyClass.Multiply(num1, num2);

В противном случае, потребуется использовать полные имена, как показано ниже.

UtilityMethods.MultiplyClass.Multiply(num1, num2)
UtilityMethods.MultiplyClass.Multiply(num1, num2);

Выполнение

Для запуска программы введите имя EXE-файла и два числа, как показано далее.

TestCode 1234 5678

Компиляция кода

Чтобы выполнить построение файла MathLibrary.DLL, скомпилируйте два файла Add и Mult при помощи следующей командной строки:

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

Параметр компилятора /target:library указывает компилятору создавать библиотеку DLL, вместо файла EXE. Параметр компилятора /out с именем файла используется для указания имени DLL-файла. В противном случае, компилятор использует первый файл (Add.cs) в качестве имени библиотеки DLL.

Для построения исполняемого файла TestCode.exe служит следующая строка команд:

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

Параметр компилятора /out указывает компилятору создавать EXE-файл и задает имя выходного файла (TestCode.exe). Этот параметр компилятора является необязательным. Параметр компилятора /reference указывает DLL-файл или файлы, используемые этой программой. Дополнительные сведения см. в разделе /reference для языка C# и /reference (Visual Basic) для языка Visual Basic.

Дополнительные сведения о построении с помощью командной строки см. в разделах Построение из командной строки с помощью csc.exe и Построение из командной строки (Visual Basic).

См. также

Задачи

Практическое руководство. Назначение базового адреса DLL

Основные понятия

Руководство по программированию на C#

Сборки и глобальный кэш сборок (C# и Visual Basic)

Создание класса, содержащего функции DLL

Отладка проектов DLL

Другие ресурсы

Руководство по программированию на Visual Basic