Самоучитель по Delphi 7 для профессионалов



              

Явный вызов



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

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

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

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;

Label1: TLabel;

Label2: TLabel;

LabelS: 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 ShowMessagef'Ошибка загрузки DLL'); 

Close;

  end;

@IsValidInt := GetProcAddress(DLLHandle, 'IsValidlnt');

 SIsValidDate := GetProcAddress(DLLHandle, 'IsValidDate');

 SValidTime := GetProcAddress(DLLHandle, 'ValidTime');

  end;

procedure TMainForm.FormClose(Sender: TObject;

 var Action: TCloseAction);

 begin if DLLHandle <> 0

then FreeLibrary(DLLHandle);

  end;

procedure TMainForm.EditlExit(Sender: TObject); 

begin

if not IsValidlnt(Editl.Text)

then Edit2.Clear; 

end;

procedure TMainForm.Edit2Exit(Sender: TObject);


Содержание  Назад  Вперед