Во-первых, как ты запускаешь
без параметра, если там должен передаваться указатель (напр. left(X)).
Во-вторых, если указатель на метод обьекта, то нужно делать как пишет
icWasya - типа так:
Код:
type
Tmain = class(TForm)
procedure perebor(Sender: TObject);// адрес этой процедуры передается в dll и обратно
end;
procedure RunStopHook(State : Boolean;pointperebor:pointer) stdcall; external 'hookkey.dll';
var
pointperebor: pointer;
pointproc:procedure() of object;
......
implementation
procedure keyctrl(x:pointer)
var i:integer;
rezultat :procedure() of object;
begin
@rezultat:=x;// адрес процедуры perebor()
rezultat();// вызов процедуры perebor
end;
.....
pointproc:=Tmain.perebor;
pointperebor:=@pointproc;
.....
begin
RunHook(true,pointperebor)// передаем в dll адрес на процедуру perebor
end;
......
почему-то нужно указатель запоминать через доп. переменную (pointproc: procedure() of object
иначе не получается.
Код:
procedure RunStopHook(State : Boolean;pointperebor:pointer) export; stdcall;
begin
if State=true then
begin
// Запускаем ловушку.
SysHook := SetWindowsHookEx(WH_GETMESSAGE,
@SysMsgProc, HInstance, 0);
x:=pointperebor;
left({здесь должен быть какой-то указатель, напр. "Х"});
end
end;
procedure left(x:pointer);
begin
keyctrl(x);
end;