![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте, уважаемые профессионалы! 
		
	
		
		
		
		
		
	
		
		
	
	
	У меня есть dll с хуком, отлавливающим нажатие клавиш. Есть объект, тип которого описан в отдельном модуле и используется в dll. Есть массив, где хранится количество каждой нажатой клавиши по адресу wParam и строка, которая логгирует все нажатия. Код: 
	type
TKeyboardMap=array[0..255] of word;
TKeyboard=class
   private
    mas: TKeyboardMap ;
    s:string;
   public
      procedure addPress(ws:word; ls: longint);
      property map:TKeyboardMap read mas;
      property st:string read s;
     constructor create;
end;Код: 
	library KeyboardHook;
{$R *.res}
uses
  Sharemem,
  Messages,
  Windows,
  KeyboardUnit in 'KeyboardUnit.pas';
var SysHook: hHook = 0;
keyboard: TKeyboard ;
function GetKeyboard:Tkeyboard;  export; stdcall;
begin
   result:=keyboard;
end;
function KeyboardProc(Code: Integer; wParam: WParam; LParam: LParam): integer; stdcall;
begin
  if byte(LParam shr 24)<$80 then //key is pressed
  begin
      keyboard.addPress(wParam, lParam);
  end;
  result:=CallNexthookEx(SysHook, code, WParam, LParam);
end;
procedure RunStopHook(State: Boolean) export; stdcall;
begin
  if State then
  begin
    keyboard:=TKeyboard.create;
    SysHook:= SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, hInstance, 0)
  end
  else
  begin
    UnhookWindowsHookEx(SysHook);
    SysHook:=0;
    keyboard.Destroy;
  end;
end;
exports RunStopHook, GetKeyboard;
end. | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну, для начала, если ты хочешь передавать строки из/в dll, то надо еще включить модуль ShareMem (и положить соотв. доп dll). String - это не безопасный тип и память под него выделяется определенным образом. 
		
	
		
		
		
		
		
	
		
		
	
	
	Вообще, лучше уж тогда поменить String на PChar, вот этот тип безопасен.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
T232006 (20.03.2024)
  | ||