Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.13;
Скачать: CL | DM;

Вниз

AV в обработчике сообщений...   Найти похожие ветки 

 
istok2   (2008-12-05 17:09) [0]

создаю окно:

 FWindowHandle := CreateInVisibleWindow(cAppFltrWindow, HookProc);

обработчик сообщений окна такой:

procedure TAppBlocker.HookProc(var Msg: TMessage);
var
 Block: Boolean;
begin
 case Msg.Msg of
     $0400 + 100:
       begin
         Block := False;
         if Assigned(FOnAppCreateEvent) then
           FOnAppCreateEvent(Self, Msg.WParam, Block);
         if Block then
           weTerminateProcess(Msg.WParam);
       end;
   else
     Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam,
       Msg.LParam);
 end;
end;


в каких-то оч редких случаях в win2003 в строке      

Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.LParam);

вылетает AV. Что тут неверно и почему может быть av?


 
Leonid Troyanovsky ©   (2008-12-05 17:16) [1]


> istok2   (05.12.08 17:09)  

> вылетает AV. Что тут неверно и почему может быть av?

И кто такой CreateInVisibleWindow.

--
Regards, LVT.


 
Сергей М. ©   (2008-12-05 17:19) [2]


> cAppFltrWindow


Это что за окно, родительское что ли ?
А какой тайный смысл в этом - создавать дочернее окно, которое никогда не будет видимым ?


 
istok2   (2008-12-05 17:22) [3]


> И кто такой CreateInVisibleWindow.



function CreateInVisibleWindow(const WndClass: string; Method: TWndMethod): HWND;
var
 UtilWindowClass: TWndClass;

 function AllocateWnd(Method: TWndMethod): HWND;
 var
   TempClass: TWndClass;
   ClassRegistered: Boolean;
 begin
   UtilWindowClass.hInstance := HInstance;
 {$IFDEF PIC}
   UtilWindowClass.lpfnWndProc := @DefWindowProc;
 {$ENDIF}
   ClassRegistered := GetClassInfo(HInstance, UtilWindowClass.lpszClassName,
     TempClass);
   if not ClassRegistered or (TempClass.lpfnWndProc <> @DefWindowProc) then
   begin
     if ClassRegistered then
       Windows.UnregisterClass(UtilWindowClass.lpszClassName, HInstance);
     Windows.RegisterClass(UtilWindowClass);
   end;
   Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
     "", WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
   if Assigned(Method) then
     SetWindowLong(Result, GWL_WNDPROC, Longint(MakeObjectInstance(Method)));
 end;

begin
 with UtilWindowClass do
 begin
   style := 0;
   lpfnWndProc := @DefWindowProc;
   cbClsExtra := 0;
   cbWndExtra := 0;
   hInstance := 0;
   hIcon := 0;
   hCursor := 0;
   hbrBackground := 0;
   lpszMenuName := nil;
   lpszClassName := PChar(WndClass);
 end;

 Result := AllocateWnd(Method);

end;




> Это что за окно, родительское что ли ?
> А какой тайный смысл в этом - создавать дочернее окно, которое
> никогда не будет видимым ?


для приемки и обработки сообщений от дллки.


 
Сергей М. ©   (2008-12-05 17:26) [4]

Ах вон оно что ..

Непонятно только, зачем было городить огород со своей ф-цией, в то время как штатная AllocateHWnd делат то же самое, ну разве что имя класса окна в ней жестко прописано ..


 
Leonid Troyanovsky ©   (2008-12-05 17:41) [5]


> istok2   (05.12.08 17:09)  

> вылетает AV. Что тут неверно и почему может быть av?

Возможно, что окно  FWindowHandle так и не создали.
Проверок-то нет никаких.

> в каких-то оч редких случаях в win2003 в строке

В каких-каких?

--
Regards, LVT.


 
istok2   (2008-12-05 17:43) [6]


> В каких-каких?

не знаю, просто у юзера одного вылетело первый раз за несколько месяцев...


 
Leonid Troyanovsky ©   (2008-12-05 17:47) [7]


> istok2   (05.12.08 17:22) [3]

> для приемки и обработки сообщений от дллки.

Сообщения от длл примет любое сущ. окно приложения.
За чем же городить огород?

--
Regards, LVT.


 
istok2   (2008-12-05 17:51) [8]

это приложение без окон.


 
Slym ©   (2008-12-05 17:59) [9]

istok2   (05.12.08 17:09)
винда эксепшинами не кидается... если только стек не порушили...
istok2   (05.12.08 17:43) [6]
стечение обстоятельств, аккомулирующаяся ошибка ,битая память


 
istok2   (2008-12-05 18:02) [10]

вот повешу я там тупо try except - не будет ли потом последствий более жестких?


 
Leonid Troyanovsky ©   (2008-12-05 18:03) [11]


> istok2   (05.12.08 17:51) [8]

> это приложение без окон.

Консольное?

Что за .. пытки партизанки?
Выкладывай все, на. Или иди, на.

--
Regards, LVT.


 
Slym ©   (2008-12-05 18:06) [12]

istok2   (05.12.08 18:02) [10]
что жесче поломаного стека?


 
Сергей М. ©   (2008-12-05 19:51) [13]


> для приемки и обработки сообщений от дллки


А не по барабану ли кто является отправителем сообщения ?
ты к чему вообще упомянул dll ?

Лучше бы показал свой цикл ожидания/выборки/диспетчеризации оконных сообщений ..



Страницы: 1 вся ветка

Текущий архив: 2009.12.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
2-1256655721
Nutz
2009-10-27 18:02
2009.12.13
Сохранение в Unicode


6-1210679150
Андрей
2008-05-13 15:45
2009.12.13
Как получить данные от сервера в ответ на post метод


2-1256244709
Drowsy
2009-10-23 00:51
2009.12.13
BDE Administrator.


1-1228589526
Германн
2008-12-06 21:52
2009.12.13
BDE и bat-файлы


15-1255593046
картман
2009-10-15 11:50
2009.12.13
Букварь по теорверу