Статический импорт
Импорт из DLL может проводиться по имени процедуры (функции), порядковому номеру или с присвоением другого имени.
При статическом импорте все действия по загрузке и подключению библиотеки выполняются автоматически операционной системой во время запуска главной программы. Чтобы задействовать статический импорт, достаточно просто объявить в программе процедуры и функции библиотеки как внешние. Это делается с помощью директивы external, например:
// вызов по имени
procedureBubleSortIntegers (varArr: arrayofInteger); stdcall;
external 'SortLib.dll';
procedure QuickSort(var Arr: array of Integer); stdcall;
external 'SortLib.dll';
procedure HelloWorld(AForm : TForm); stdcall;
external 'SortLib.dll';
После ключевого слова external записывается имя двоичного файла библиотеки в виде константной строки или константного строкового выражения.
Если вы хотите изменить имя импортируемой функции (процедуры), то можно использовать директиву name, которая служит для явного указания экспортного имени процедуры в библиотеке. С ее помощью объявления процедур можно переписать по-другому:
// присвоением другого имени внешней процедуре
procedure QuickSort(var Arr: array of Integer); stdcall;
external 'SortLib.dll' name 'QuickSortIntegers';
Импорт по порядковому номеру требует от вас указание этого самого номера:
procedure SayHelloWorld(AForm : TForm);
external 'myfirstdll.dll' index 15;
В этом случае имя, которое вы даете процедуре при импорте не обязательно должно совпадать с тем, которое было указано для нее в самой DLL. Т.е. приведенная выше запись означает, что вы импортируете из динамической библиотеки myfirstdll.dll процедуру, которая в ней экспортировалась пятнадцатой, и при этом в рамках вашего приложения этой процедуре дается имя SayHelloWorld.
Поместив в программу приведенные выше объявления, можно вызывать процедуры BubleSort, QuickSort и HelloWorld, как будто они являются частью самой программы.
…
Var Arr: array [0..9] of Integer;
I: Integer;
Begin
Дата добавления: 2015-09-07; просмотров: 995;