Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

AV в обработчике сообщений... [D7]


istok2 ©   (2008-12-05 17:09:00) 

создаю окно:

 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?


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


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


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

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


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

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


Leonid Troyanovsky   (2008-12-05 18:03:00) [3]


> istok2   (05.12.08 17:51) [8]

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

Консольное?

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

--
Regards, LVT.


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

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


Slym   (2008-12-05 17:59:00) [5]

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


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

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


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


> istok2   (05.12.08 17:22) [3]

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

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

--
Regards, LVT.


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


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

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


Leonid Troyanovsky   (2008-12-05 17:41:00) [9]


> istok2   (05.12.08 17:09)  

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

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

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

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

--
Regards, LVT.


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

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

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


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


> И кто такой 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:19:00) [12]


> cAppFltrWindow


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


Leonid Troyanovsky   (2008-12-05 17:16:00) [13]


> istok2   (05.12.08 17:09)  

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

И кто такой CreateInVisibleWindow.

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо