|
Неявный вызов
Механизм неявного вызова наиболее прост,
т. к. выполняется автоматически и основан на имеющейся
в приложении информации о вызываемых функциях и динамических
библиотеках. Однако разработчик не имеет возможности
влиять на ход загрузки DLL. Если операционная система
не смогла загрузить библиотеку, просто выдается сообщение
об ошибке. Единственный способ повлиять на процесс загрузки
— использовать секцию инициализации библиотеки (см.
выше).
В качестве примера неявного вызова
рассмотрим простое приложение DemoDLLl,
использующее функции библиотеки DataCheck
(см. выше). Для этого в нем имеются три компонента TEdit,
в которых осуществляется проверка введенной строки на
соответствие формату одного из типов данных.
Примечание
Проекты DemoDLL1
и DataCheck объединены в одну
группу. Переключение между проектами легко выполняется
утилитой Диспетчер проектов.
Листинг 28.5.Модуль
главной формы проекта DemoDLL1
unit Unitl;
interface
uses
Windows, Messages,
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, comctrls, Buttons;
type
TMainForm = class(TForm)
Editl: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure EditlExit(Sender:
TObject);
procedure Edit2Exit(Sender:
TObject);
procedure EditSExit(Sender:
TObject);
private
{ Private declarations
}
public
{ Public declarations
}
end;
var
MainForm: TMainForm;
function IsValidlnt(AText:
String): Boolean; external 'DataCheck.dll';
function IsValidDate(AText:
String): Boolean; external 'DataCheck.dll';
function ValidTime(AText:
String): Boolean; external 'DataCheck.dll';
implementation {$R
*.DFM}
procedure TMainForm.EditlExit(Sender:
TObject);
begin if not
IsValidlnt(Editl.Text)
then Editl.Clear;
end;
procedure TMainForm.Edit2Exit(Sender:
TObject);
begin
if not IsValidDate(Edit2.Text)
then Edit2.Clear;
end;
procedure TMainForm.Edit3Exit(Sender:
TObject);
begin if not ValidTime(Edits.Text)
then EditS.Clear;
end;
end.
Для организации неявного вызова достаточно
объявить нужную функцию с директивой external
и указать имя содержащей ее динамической библиотеки.
Обратите внимание, что третья функция объявлена под
псевдонимом isValidTime, который
объявлен для этой функции при помощи ключевого слова
name в исходном коде динамической
библиотеки.
В дальнейшем импортированные функции
используются обычным образом.
|