Пример обратного вызова DLL. Вариант 2

Обратный вызов (callback) для NotifyRegister должен находиться в DLL. Вам не нужен MakeProcInstance, просто добавьте "export" к объявлению функции. Нижеследующий код является простым примером DLL для Delphi. Вы должны запустить все тесты вне Delphi или же ваша программа не получит никаких уведомлений (notifications). Все это выглядит похожим на Delphi, зарегистрировавшей перехват с Toolhelp...

Library Lib1;

Uses WinTypes, Messages, WinProcs, Toolhelp;

Const

WM_NOTIFY = WM_USER+$100;


Var
targetHWnd: HWnd;

Function HookProc( wID: Word; dwData: LongInt ): Bool; export;
Begin
PostMessage( targetHWnd, WM_NOTIFY, wID, dwData );
Result := False
End;

Procedure InstallHook( notifyWindow: HWnd ); export;
Begin
If targetHWnd = 0 Then Begin
If not NotifyRegister( 0, HookProc, NF_NORMAL )
Then Begin
MessageBox( notifyWindow, 'Неудача NotifyRegister!',
'Ошибка!', MB_OK+MB_ICONSTOP );
End
Else Begin
targetHWnd:= notifyWindow;
End;
End;
End;

Procedure UnInstallHook; export;
Begin
If targetHWnd <> 0 Then Begin
NotifyUnregister( 0 );
targetHWnd := 0;
End;
End;

exports
InstallHook,
UnInstallHook;

begin
targetHWnd:= 0;
end
.

 
« Предыдущая статья   Следующая статья »