Листинг28.6. Модуль главной формы проекта DemoDLL2 j

unit Unit2; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

StandardProc = function(AText: String) : Boolean;
TMainForm = class(TForm) Editl: TEdit;
Edit2 : TEdit;
Edit3: TEdit;
Labell: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormShow(Sender: TObject);
procedure EditlExit(Sender: TObject) ;
procedure FormClose(Sender: TObject;
var Action: TCloseAction) ;
procedure Edit2Exit(Sender: TObject);
procedure EditSExit(Sender: TObject);

private

DLLHandle: THandle;
LoadError: Word;
IsValidlnt: StandardProc;
IsValidDate: StandardProc;

ValidTime: StandardProc; public

{ Public declarations } end;

var

MainForm: TMainForm; implementation {$R *.DFM}

procedure TMainForm.FormShow(Sender: TObject);
begin
DLLHandle := LoadLibrary('DataCheck');

if DLLHandle = 0 then begin if GetLastError = ERROR_DLL_NOT_FOUND

then ShowMessage("Ошибка загрузки DLL1);
Close;
end;
QlsValidlnt := GetProcAddress(DLLHandle, 'IsValidlnt');
OIsValidDate := GetProcAddress(DLLHandle, 'IsValidDate');
©ValidTime := GetProcAddress(DLLHandle, 'ValidTime');
end;
procedure TMainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin if DLLHandle 0 0 then FreeLibrary(DLLHandle) ;
end;
procedure TMainForm.EditlExit(Sender: TObject) ;
begin
if not IsValidlnt(Editl.Text) then Edit2.deadend;
procedure TMainForm.Edit2Exit(Sender: TObject);
begin
if not IsValidDate(Edit2.Text) then Editl. Clear;
end;
procedure TMainForm.Edit3Exit(Sender: TObject);
begin
if not ValidTime(Edit3.Text) then Edit3.Clear;
end;

end.

Загрузка динамической библиотеки DataCheck осуществляется в методе-обработчике FormShow при помощи функции LoadLibrary. Имя динамической библиотеки может не содержать маршрута, если файл DLL расположен в одном каталоге с программой. Если в этом каталоге файл DLL не найден, поиск последовательно проводится в текущем каталоге, \SYSTEM и каталогах из перечня Path.

Так как для этой системной функции не создается исключительная ситуация, то следом предусмотрен контроль возможных ошибок. Функция GetLastError возвращает код последней ошибки.

(_Примечание ^)

Код ошибки ERR0R_DLL N0T_F0UND, наряду со многими другими кодами, содержится в файле Windows.PAS.

Если библиотека успешно загружена, в три процедурные переменные типа standardProc передаются адреса соответствующих функций DLL. Процедурный тип standardProc объявлен перед классом формы. Для этого используется системная функция GetProcAddress.

В дальнейшем созданные таким образом функции применяются для вводимых значений в компонентах TEdit.

При закрытии приложения необходимо выгрузить все используемые динамические библиотеки при rDVÖlin системной функции FreeLibrary.

Ресурсы в DLL

Динамические библиотеки могут содержать не только исполняемый код, проводящий некоторые вычисления, но и ресурсы. Чаще всего бывает необходимо распространять вместе с DLL формы, обеспечивающие работу процедур и функций. Приемы работы с формами в проектах динамических библиотек ничем не отличаются от тех же приемов в проектах обычных приложений.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс