Показать сообщение отдельно
  #43  
Старый 08.11.2012, 18:30
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Во-первых, как ты запускаешь
Цитата:
left()
без параметра, если там должен передаваться указатель (напр. 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;
Ответить с цитированием