Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1255379407
Юрий
2009-10-13 00:30
2009.12.13
С днем рождения ! 13 октября 2009 вторник


2-1256123784
defen
2009-10-21 15:16
2009.12.13
тсключение EDBEngineError


3-1231501515
Виталий Панасенко
2009-01-09 14:45
2009.12.13
Ошибка с CHAR_SET WIN1251


15-1255725008
Юрий
2009-10-17 00:30
2009.12.13
С днем рождения ! 17 октября 2009 суббота


2-1256659669
Turok
2009-10-27 19:07
2009.12.13
WinSight и авторизация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский