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

 

Code:

unit UDLLTest;

 

interface

 

uses

 

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls;

 

type

 

TForm1 = class(TForm)

   Button1: TButton;

   procedure Button1Click(Sender: TObject);

private

   { Private declarations }

public

   { Public declarations }

end;

 

{ Вот типы, которые требуются для работы нашей функции bob }

 

TBOB = function(Fire: Word; Dances: Boolean): Boolean; stdcall;

 

var

 

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.Button1Click(Sender: TObject);

var

 

BOB: TBOB;

hDLLInst: THandle;

IsAlive, IsDancing: Boolean;

Years: Word;

 

begin

 

{ Загружаем и получаем дескриптор нашего BLODGE.DLL }

hDLLInst := LoadLibrary('BLODGE.DLL');

{ Если загрузка не была успешной, генерируем свое исключение }

if (hDLLInst <= 0) then

   raise exception.create('[Неудачный вызов LoadLibrary]');

{ Попытаемся получить адрес функции BOB }

try

   @BOB := GetProcAddress(hDLLInst, 'BOB');

   if not assigned(BOB) then

     raise exception.Create('[Неудачный вызов GetProcAddress]');

   Years := 25;

   IsDancing := True;

   { Теперь мы можем выполнить функцию BOB }

   IsAlive := BOB(Years, IsDancing);

finally

   { Освобождаем дескриптор DLL }

   FreeLibrary(hDLLInst);

end;

end;

 

end.

 

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

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

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

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


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