M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Неявный вызов

    Механизм неявного вызова наиболее прост, т. к. выполняется автоматически и основан на имеющейся в приложении информации о вызываемых функциях и динамических библиотеках. Однако разработчик не имеет возможности влиять на ход загрузки 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 в исходном коде динамической библиотеки.

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