- •1.1. Порядок выполнения задания
- •1.2. Варианты заданий
- •2.1. Порядок выполнения задания
- •2.2. Варианты заданий
- •3.1. Порядок выполнения задания
- •3.2. Варианты заданий
- •4.1. Порядок выполнения задания
- •4.2. Варианты заданий
- •5.1. Порядок выполнения задания
- •5.2. Варианты заданий
- •6.1. Порядок выполнения задания
- •6.2. Варианты заданий
- •7.1. Порядок выполнения задания
- •7.2. Варианты заданий
- •8.1. Порядок выполнения задания
- •8.2. Варианты заданий
- •9.1. Порядок выполнения задания
- •9.2. Варианты заданий
- •10.1. Порядок выполнения задания
- •10.2. Варианты заданий
- •11.1. Порядок выполнения задания
- •11.2. Варианты заданий
- •12.1. Порядок выполнения задания
- •12.1.1. Общие понятия о реестре Windows.
- •12.1.2. Работа с реестром Windows в Delphi*.
- •12.2. Варианты заданий
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 следует скопировать в каталог, где расположена вызывающая программа.
