Главная » Delphi » Использование DLL в приложениях Delphi

0

Как уже отмечалось в этой  главе,  существует  два способа  загрузки  или импортиро вания  функций библиотек DLL — явный и неявный. В настоящем разделе оба способа будут продемонстрированы на примере созданных ранее библиотек DLL.

Первая библиотека DLL, созданная в данной главе,  содержала модуль интерфейса (PenniesInt.pas). Воспользуемся этим модулем для иллюстрации неявного связы вания  с библиотекой DLL. Главная  форма демонстрационного проекта содержит компоненты TMaskEdit, TButton и девять экземпляров компонента TLabel.

В данном  приложении пользователь вводит  сумму денег  в пенсах.  По  щелчку  на

кнопке программа отображает введенную  сумму в виде  набора монет  разного досто инства. Эта информация поступает от экспортируемой функции PenniesToCoins() библиотеки PenniesLib.dll.

Главная   форма  приложения  определена в  модуле  MainFrm.pas,  код  которого

приведен в листинге 6.5.

Листинг 6.5. Главная форма проекта

unit MainFrm;

interface uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Mask;

type

TMainForm = class(TForm) lblTotal: TLabel; lblQlbl: TLabel; lblDlbl: TLabel; lblNlbl: TLabel;lblPlbl: TLabel; lblQuarters: TLabel; lblDimes: TLabel; lblNickels: TLabel; lblPennies: TLabel; btnMakeChange: TButton; meTotalPennies: TMaskEdit;

procedure btnMakeChangeClick(Sender: TObject);

end;

var

MainForm: TMainForm;

implementation

uses PenniesInt;     // Использование модуля интерфейса

{$R *.DFM}

procedure TMainForm.btnMakeChangeClick(Sender: TObject);

var

CoinsRec: TCoinsRec;

TotPennies: word;

begin

{ Вызов функции DLL для определения минимального количества

монет, составляющих заданную сумму денег. }

TotPennies := PenniesToCoins(StrToInt(meTotalPennies.Text),

@CoinsRec);

with CoinsRec do begin

{ Теперь отобразить информацию о монетах }

lblQuarters.Caption := IntToStr(Quarters);

lblDimes.Caption          := IntToStr(Dimes);

lblNickels.Caption        := IntToStr(Nickels);

lblPennies.Caption        := IntToStr(Pennies);

end

end;

end.Обратите  внимание: в  модуле  MainFrm.pas используется  модуль  PenniesInt. Напомним, что  модуль  PenniesInt.pas содержит внешние объявления для  функ ций,  помещенных в файл  библиотеки PenniesLib.dpr. При  запуске этого  приложе ния  система Win32 автоматически загружает библиотеку PenniesLib.dpr и отобра жает ее в адресное пространство процесса, вызывающего приложения.

Не  обязательно использовать модуль import. Имя  PenniesInt из  раздела  uses вполне можно  удалить и вставить объявление external для функции PenniesToCo- ins() в раздел implementation модуля MainFrm.pas:

implementation

function PenniesToCoins(TotPennies: word;

ChangeRec: PChangeRec): word; еStdCall external ‘PENNIESLIB.DLL';В модуле  MainFrm.pas придется снова  определить PChangeRec и  TChangeRec (можно просто скомпилировать это приложение с указанием  директивы компилятора PENNIESLIB). Такой  метод может с успехом использоваться в тех случаях, когда необ ходим доступ лишь к некоторым функциям данной библиотеки. Но чаще всего оказы вается, что требуются не только  внешние объявления для функций библиотеки DLL, но и доступ к типам, определенным в ее разделе interface.

НА ЗАМЕТКУ

При использовании DLL стороннего производителя, модуля ее интерфейса на языке Pascal может и не оказаться. Обычно, вместо него поставляется библиотека импорти- руемых функций C/C++. В таком случае придется перевести эту библиотеку в эквива- лентный модуль интерфейса Delphi.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии