Передача параметров в DLL - PullRequest
1 голос
/ 13 января 2012

Я реализую глобальный хук мыши и застрял при передаче параметров в DLL. Не могли бы вы помочь мне?

Это функция хост-приложения для запуска ловушки:

function TMainForm.StartHook(LockDirection: byte): boolean;
type
  TStartHook = function(AppHandle: HWND; LockDir: byte): Byte;
var
  StartHookProc: TStartHook;
  SHresult: Byte;
  i:integer;
  LibPath: string;
begin
  LibPath:=ExtractFilePath(Application.ExeName)+'hooklib.dll';
  HookInfo.LibHandle := LoadLibrary(pwidechar(LibPath));

  @StartHookProc := GetProcAddress(HookInfo.LibHandle, 'StartHookProc');
  if @StartHookProc = nil then begin
    Showmessage('Exit #1');
    Exit;
  end;

  SHresult := StartHookProc(Handle, LockDirection);
end;

И это функция на стороне DLL StartHookProc

function StartHookProc(AppHandle: HWND; LockDir: byte): Byte; stdcall;
begin
  Result := 0;
  if Hooked then
  begin
    Result := 1;
    Exit;
  end;

  HookHandle:= SetWindowsHookEx(WH_MOUSE, @MouseHookProc, hInstance, 0);
...
end;

Я думаю, что то, что я пытаюсь сделать, понятно - просто передайте параметр LockDirection в dll, чтобы я мог соответствующим образом обрабатывать сообщения мыши. Тем не менее, когда я передаю 0 в качестве параметра, на стороне dll он показывает «ě» (236). Что я делаю не так?

Спасибо

1 Ответ

2 голосов
/ 13 января 2012

TStartHook объявлено неправильно. Отсутствует соглашение о вызовах. Должно быть:

type
  TStartHook = function(AppHandle: HWND; LockDir: byte): Byte; stdcall;
...