При статическом импорте все действия по загрузке и подключению библиотеки выполняются автоматически операционной системой во время запуска главной программы. Чтобы задействовать статический импорт, достаточно просто объявить в программе процедуры и функции библиотеки как внешние. Это делается с помощью директивы external, например:
procedure BubleSortIntegers(var Arr: array of Integer); stdcall; external 'SortLib.dll'; procedure QuickSortIntegers(var Arr: array of Integer); stdcall; external 'SortLib.dll'; |
После ключевого слова external записывается имя двоичного файла библиотеки в виде константной строки или константного строкового выражения. Вместе с директивой external может использоваться уже известная вам директива name, которая служит для явного указания экспортного имени процедуры в библиотеке. С ее помощью объявления процедур можно переписать по-другому:
procedure BubleSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'BubleSortIntegers'; procedure QuickSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'QuickSortIntegers'; |
Поместив в программу приведенные выше объявления, можно вызывать процедуры BubleSort и QuickSort, как будто они являются частью самой программы. Давайте это проверим.
Шаг 6. Создайте новую консольную программу. Для этого выберите в меню команду File | New | Other... и в открывшемся диалоговом окне выделите значок Console Application. Затем нажмите кнопку OK.
Шаг 7. Добавьте в программу external-объявления процедур BubleSort и QuickSort, а также наберите приведенный ниже текст программы. Сохраните проект под именем TestStaticImport.dpr.
program TestStaticImport; {$APPTYPE CONSOLE} procedure BubleSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'BubleSortIntegers'; procedure QuickSort(var Arr: array of Integer); stdcall; external 'SortLib.dll' name 'QuickSortIntegers'; var Arr: array [0..9] of Integer; I: Integer; begin // Метод <пузырька> Randomize; for I := Low(Arr) to High(Arr) do Arr[I] := Random(100); // Заполнение массива случайными числами BubleSort(Arr); for I := Low(Arr) to High(Arr) do Write(Arr[I], ' '); Writeln; // Метод быстрой сортировки for I := Low(Arr) to High(Arr) do Arr[I] := Random(100); // Заполнение массива случайными числами QuickSort(Arr); for I := Low(Arr) to High(Arr) do Write(Arr[I], ' '); Writeln; Writeln('Press Enter to exit...'); Readln; end. |
Шаг 8. Выполните компиляцию и запустите программу. Если числа печатаются на экране по возрастанию, то сортировка работает правильно.
В результате проделанных действий можно уже сделать первый важный вывод: компиляция программы не требует наличия компилированной библиотеки, а это значит, что их разработка может осуществляться совершенно независимо, причем разными людьми. Нужно лишь договориться о типах и списках параметров, передаваемых в процедуры и функции, а также выбрать единое соглашение о вызове.