Глобальная переменная в dll
От: jcp  
Дата: 17.11.10 04:44
Оценка:
очень простой пример. реализация клавиатурного хука через dll.

library Hook;
uses Windows, SysUtils, dialogs;
var
myHook: HHook = 0;
w1: longint =44;


function MsgProc(Code: integer; wParam: Word; lParam: Longint): Longint; stdcall;
begin
if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
begin
showmessage(inttostr(w1));
result := 1;
end else result := CallNextHookEx(0, Code, wParam, lParam);
end;

procedure setHook(Hook: boolean) stdcall;
begin
if Hook then
if myHook = 0 then myHook := SetWindowsHookEx(WH_KEYBOARD, @MsgProc, HInstance, 0)
else
begin
if myHook <> 0 then UnHookWindowsHookEx(myHook);
myHook := 0;
end;
end;
procedure start; stdcall;
begin
w1:=555555;
end;


exports setHook name 'SetHook', start name 'start';

begin
end.


в программе грузится статически.
procedure setHook(Hook: boolean) stdcall; external 'hook.dll' name 'SetHook';
procedure start; stdcall; external 'hook.dll' name 'start';
из программы при onshow идет start и потом sethook.
процедура start выполняется один раз при запуске программы. происходит присвоение глобальной переменной w1.

внимание вопрос.
когда приложение, которое вызвало эту длл в фокусе, showmessage w1 показывает нужное значение 555555,
но когда без фокуса начальное значение переменной 44.
почему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.