******EXE******
Код:
type
Tvideodriver = class(TForm)
procedure perebor();
end;
procedure keyctrl(nx:pointer);
var
N:integer;
pointval: pointer;
temp: procedure() of object;
.....
implementation
procedure keyctrl( nx: pointer);
var i:integer;
proc: procedure() of object;
begin
@proc:=nx;
proc;
showmessage(' работает keyctrl N='+IntToStr(N)); // почему N оказывается равен 0 ?
end;
procedure Tvideodriver.perebor();
begin
N:=3;
end;
procedure Tvideodriver.openClick(Sender: TObject);
begin
RunStopHook(true,pointval);
end;
procedure Tvideodriver.FormCreate(Sender: TObject);
begin
temp:=videodriver.perebor;
pointval:=@temp;
end;
******DLL****
Код:
uses
......
var nx1:pointer;
procedure RunStopHook(State : Boolean;pointval:pointer) export; stdcall;
begin
if State=true then
begin
// Запускаем ловушку.
SysHook := SetWindowsHookEx(WH_GETMESSAGE,
@SysMsgProc, HInstance, 0);
nx1:=pointval;
keyctrl(nx1);
end
end;
exports RunStopHook;
begin
end.
Код конечно существенно сокращен, для более легкого восприятия.