Помогите разобраться с ошибкой при выполнении кода.
Значит суть ошибки следующая. Когда создаю дочернюю форму все проходит нормально. При закрытии дочернего окна появляется ошибка: First chance exception at $765D3843. Exception class EAccessViolation with message 'Access violation at address 76AAEE25 in module 'USER32.dll'. Read of address 00000000'. Process TestStend.exe (1528)
В чем ошибка? Помогите пожалуйста!!
| Код | {**********Модуль хука*******************} unit uHook;
interface
uses SysUtils, Classes, Windows, Messages, uTestForm;
function SetHook: boolean; function StopHook: boolean; function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt;
var MyHook: HHook = 0;
implementation
function HookProc(Code:Integer; WParam:LongInt; Msg: PCWPStruct):LongInt; begin if Code < 0 then begin Result := CallNextHookEx(MyHook, Code, WParam, Longint(Msg)); Exit; end; if Code = HC_ACTION then case Msg.message of // WM_MDICREATE создание дочернего MDI-окна WM_MDICREATE: Form1.ListBox1.Items.Add('Создание MDIChild'); // WM_MDIDESTROY удаление дочернего MDI-окна WM_MDIDESTROY: Form1.ListBox1.Items.Add('Удаление MDIChild'); end; CallNextHookEx(MyHook, Code, WParam, Longint(Msg)); HookProc := 0; Exit; end;
function SetHook: boolean; begin MyHook:=SetWindowsHookEx(WH_CALLWNDPROC, @HookProc, 0, GetCurrentThreadID()); if MyHook <> 0 then Result := True else Result := False; end;
function StopHook: boolean; begin if MyHook <> 0 then begin StopHook := UnhookWindowsHookEx(MyHook); MyHook:=0; end; end;
end.
{**********Модуль Главной формы***************} unit uTestForm;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uComp, CalcEdit, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) ... ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
uses uHook, uMDIChild;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin TForm2.Create(Application).Show; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin StopHook; end;
procedure TForm1.FormCreate(Sender: TObject); begin ... SetHook; end;
end.
|
|