Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика_нов.doc
Скачиваний:
3
Добавлен:
24.09.2019
Размер:
657.41 Кб
Скачать

9.1. Порядок выполнения задания

Создать новый проект, содержащий одну форму. Реализовать задание в виде функции. При этом, в зависимости от задания, если в функцию необходимо передавать текстовые строки, описать их типом Pchar. Создать обработчик события для проверки правильности реализации задания.

Создать новую библиотеку DLL. Для этого следует закрыть проект Delphi и выбрать пункт меню File-New-Other. При этом откроется окно, в котором на странице New следует выбрать пиктограмму DLL Wisard и нажать Ok. При этом будет создана новая DLL-библиотека. Обратить внимание на то, что DLL-библиотека по умолчанию не имеет форм. DLL-библиотека на Delphi имеет следующую структуру:

Library Test; Uses .......  Procedure MyProc1; Stdcall;  Begin    ......     End

Procedure MyProc2(s:pchar); Stdcall;  Begin    ......     End;

Procedure MyProc3(m:integer); Stdcall;  Begin    ......     End; Exports 

Myproc,

Myproc1

Myproc2; Begin  End.

Как следует из данной структуры, DLL-библиотека представляет собой простой набор подпрограмм (хотя и существует возможность добавлять в DLL новые формы, ресурсы и т.п.). Реализация этих подпрограмм начинается сразу после предложения Uses. После реализации следует раздел Exports, в котором перечисляются имена экспортируемых подпрограмм. Именно по этим именам можно обращаться к любой из функций, входящих в состав библиотеки.

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

Это сообщение говорит о том, что DLL-библиотека скомпилирована, ошибок нет, однако, для того, чтобы ее запустить, необходимо выбрать программу. Здесь проявляется главное свойство DLL-библиотек: они не могут работать без вызывающей программы.

Вызывающая программа может обращаться лишь к тем функциям DLL-библиотеки, которые перечислены в разделе Exports. Для того чтобы вызвать любую из функций библиотеки, последнюю сначала нужно загрузить в память компьютера. Это выполняется при помощи функции WinApi LoadLibrary. Эта функция проверят, загружена ли эта библиотека в память, и, если не загружена, то загружает, возвращая в любом случае адрес, по которому располагается библиотека в памяти.

Следующий шаг - определение адреса требуемой функции в пределах библиотеки. Для этого используется функции WinApi GetProcAddress. После определения адреса функции ee легко вызвать (см. код ниже):

type   TMyProc = procedure;

var   DLLInstance : THandle;   MyProc : TMyProc; begin   { загружаем DLL }   DLLInstance := LoadLibrary('myfirstdll.dll');   { получаем указатель }   @myProc := GetProcAddress(DLLInstance, 'MyProc');   { вызываем процедуру на выполнение }   MyProc;   { выгружаем DLL из оперативной памяти }   FreeLibrary(DLLInstance); end;

После удачного компилирования DLL-библиотеки следует создать вызывающую программу. При этом файл *.dll следует скопировать в каталог, где расположена вызывающая программа.