На главную страницу
Форум txt.version   




Статья :: Неявный вызов

 

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

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

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

 

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

страницы в данном разделе 
 ГЛАВА 28  ГЛАВА 28 Динамические библиотеки
 Проект DLL  Экспорт из DLL
 Соглашения о вызовах  Директива register
 Директива pascal  Директива stdcall
 Директива cdecl  Директива safecall
 Инициализация и завершение работы DLL  Вызов DLL
 Неявный вызов  Явный вызов
 Ресурсы в DLL  Использование модуля ShareMem
 Резюме   


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста