Содержание материала

 

ДИНАМИЧЕСКАЯ ЗАГРУЗКА DLL

===================

 

При динамической загрузке требуется написать немного больше кода.

А вот как это выглядит:

 

Code:

unit untMain;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

 

type

Tcalc_double = function ( r: real ): real;

 

TForm1 = class(TForm)

   Button1: TButton;

   procedure Button1Click(Sender: TObject);

private

   { Private declarations }

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.Button1Click(Sender: TObject);

var

  hndDLLHandle: THandle;

  calc_double: Tcalc_double;

begin

    try

       // загружаем dll динамически

       hndDLLHandle := loadLibrary ( 'ExDouble.dll' );

 

       if hndDLLHandle <> 0 then begin

 

          // получаем адрес функции

          @calc_double := getProcAddress ( hndDLLHandle, 'calc_double' );

 

          // если адрес функции найден

          if addr ( calc_double ) <> nil then begin

             // показываем результат ( 21...)

             showMessage ( floatToStr ( calc_double ( 10.5 ) ) );

          end else

             // DLL не найдена ("handleable")

             showMessage ( 'Function not exists...' );

 

       end else

          // DLL не найдена ("handleable")

          showMessage ( 'DLL not found...' );

 

    finally

       // liberar

       freeLibrary ( hndDLLHandle );

    end;

end;

 

end.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить