Показать сообщение отдельно
  #53  
Старый 09.11.2012, 22:31
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
По умолчанию

******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.
Код конечно существенно сокращен, для более легкого восприятия.
Ответить с цитированием