PascalABC.NET
October 19, 2022

Библиотеки в PascalABC.NET и их подключение к программе на C#

PascalABC.NET - язык платформы .NET и может создавать библиотеки dll, которые можно подключать к проекту, написанному языке C# и вообще на любом .NET-языке. Делается это чрезвычайно просто.

Создание библиотеки на PascalABC.NET

Простая библиотека на PascalABC.NET представляет собой набор процедур и функций, помещенных в неекоторый файл, которыйй начинается со строки

library Имя;

и заканчивается строкой

end.

Рассмотрим простейшую библиотеку с двумя функциями - для вычисления наибольшего общего делителя двух целых чисел и для создания списка цифр целого числа:

library libAlgo;

function GCD(a, b: int64): int64;
begin
  while b <> 0 do
    (a, b) := (b, a mod b);
  Result := Abs(a)
end;

function Digits(n: int64): List<integer>;
begin
  Result := new List<integer>;
  n := Abs(n);
  while n > 0 do
  begin
    Result.Add(n mod 10);
    n := n div 10
  end;
  Result.Reverse
end;
  
end.

Данную библиотеку следует сохранить в файле с именем libAlgo,pas, совпадающем с именем библиотеки.

Откомпилируем библиотеку, нажав комбинацию клавиш Ctrl-F9. На диске будет создан файл libAlgo.dll, который является единицей компиляции в .NET. Его можно подключить к любому проекту на любом .NET-языке.

Подключение dll к программе на PascalABC.NET

Подключим вначале dll к программе на самом PascalABC.NET и вызовем все ее функции. Сделать это крайне просто:

{$reference libAlgo.dll}

begin
  Println(Digits(21345));
  Println(GCD(72,246));
end.

Здесь строка {$reference libAlgo.dll} является директивой компилятора, дающей указание компилятору подключить библиотеку к основной программе.

Обязательно надо проверить, что основная программа хранится в той же папке, что и файл libAlgo.dll.

Результат запуска:

[2,1,3,4,5] 
6 

Подключение dll к программе на C#

Создадим консольный проект на C# для .NET Framework:

Добавим ссылку на libAlgo.dll в обозревателе решений:

Для этого щелкнем на кнопке Обзор... и выберем нужную dll:

Нажмем OK.

Составим основную программу:

Здесь надо обратить внимание на подключение статического класса libAlgo.libAlgo, которое на C# осуществляется директивой

using static libAlgo.libAlgo;

Заметим, что PascalABC.NET делает это автоматически.

Кроме того, на C# приходится выводить данные списка в цикле. Однако результат программы - тот же:

6
2 1 3 4 5

Заключение. Итак, мы показали, как создавать библиотеки dll на PascalABC.NET и подключать их к программе на самом PascalABC.NET и к программе на C#, обеспечивая межъязыковое взаимодействие.