Рыдаю. Просто рыдаю.
Волшебное слово - Callback (a.k.a. функция обратного вызова).
Волшебное слово - Callback (a.k.a. функция обратного вызова).
Код:
library Project2;
uses
Windows,
SysUtils;
type
TCallbackProc = function: Integer; stdcall;
var
GetValue: TCallbackProc;
procedure Init(const ACallback: TCallbackProc); stdcall;
begin
GetValue := ACallback;
end;
function DoSomething: Integer; stdcall;
begin
Result := GetValue * 2;
end;
exports
DoSomething,
Init;
end.
Код:
unit Unit1;
...
function Callback: Integer; stdcall;
begin
Result := Form1.Tag;
end;
procedure TForm1.Button1Click(Sender: TObject);
type
TCallbackProc = function: Integer; stdcall;
TInitProc = procedure(const ACallback: TCallbackProc); stdcall;
TDoSomethingProc = function: Integer; stdcall;
var
Lib: HMODULE;
Init: TInitProc;
DoSomething: TDoSomethingProc;
begin
Lib := LoadLibrary('Project2.dll');
Win32Check(Lib <> 0);
try
Init := GetProcAddress(Lib, 'Init');
Win32Check(Assigned(Init));
Init(Callback);
DoSomething := GetProcAddress(Lib, 'DoSomething');
Win32Check(Assigned(DoSomething));
Tag := 5;
Caption := IntToStr(DoSomething); // выведет '10'
finally
FreeLibrary(Lib);
end;
end;
Комментариев нет:
Отправить комментарий