Разработка приложений в системе Delphi. Шейкер Т.Д. - 166 стр.

UptoLike

Составители: 

Пример 4. Библиотека MathLib. Динамический импорт
Приложение
unit DinMath2; //Модуль формы
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
gs, StdCtrls; Dialo
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
type
TMin = function (X, Y: Integer): Integer;
var
LibHandle: HModule; { handle of the loaded DLL }
Min: TMin; { pointer to the Min function }
a,b:integer;
begin
{ Загружаем динамическую библиотеку }
LibHandle := LoadLibrary('MathLib.dll');
{ Проверяем, нормально ли загружена библиотека }
if LibHandle < 32 then
begin
ShowMessage('Could not load DLL.');
Halt;
end;
{ Получаем адрес функции вычисления минимума }
@Min := GetProcAddress(LibHandle, 'Min');
{ Проверяем корректность указателей }
if @Min = nil then
begin
FreeLibrary(LibHandle);
ShowMessage('Could not link to procedure in DLL.');
Halt;
end;
{ Теперь можно вызывать функции Min и Max }
a:=strToInt(edit1.text);
b:=strToInt(edit2.text);
166
Пример 4. Библиотека MathLib. Динамический импорт
    Приложение
unit DinMath2;   //Модуль формы
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;
var
  Form1: TForm1;

implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
 type
  TMin = function (X, Y: Integer): Integer;
  var
  LibHandle: HModule; { handle of the loaded DLL }
  Min: TMin;          { pointer to the Min function }
  a,b:integer;

 begin
  { Загружаем динамическую библиотеку }
    LibHandle := LoadLibrary('MathLib.dll');
     { Проверяем, нормально ли загружена библиотека }
    if LibHandle < 32 then
         begin
           ShowMessage('Could not load DLL.');
           Halt;
         end;
    { Получаем адрес функции вычисления минимума }
    @Min := GetProcAddress(LibHandle, 'Min');
    { Проверяем корректность указателей }
    if @Min = nil then
       begin
        FreeLibrary(LibHandle);
        ShowMessage('Could not link to procedure in DLL.');
        Halt;
       end;
    { Теперь можно вызывать функции Min и Max }
      a:=strToInt(edit1.text);
      b:=strToInt(edit2.text);


                                166