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

Вниз

Откуда здесь AV?   Найти похожие ветки 

 
Makhanev A.S. ©   (2004-08-24 19:13) [0]

Создаю свое окно, ниже приведен код процедуры окна:

procedure TMyClass.MyWndProc(var Msg: TMessage);
begin
 case Msg.Msg of
   ...
 else
     Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.LParam); //FWindowHandle - хранит handle окна
 end;
end;


очень редко на вызове DefWindowProc при закрытии приложения вылетает AccessViolation.
Не могу понять, откуда оно здесь может взяться.


 
Cobalt ©   (2004-08-24 19:58) [1]

Может, ему присылаются какие левые сообщения? с левыми адресами? Особенно, если ты сам их ему посылаешь.
Или объект уже разрушен - тогда FWindowHandle валит.


 
OSokin ©   (2004-08-24 21:29) [2]

Что за окно? Назови тип и то, что ты хочешь расположить. А то непонятно что получается!


 
Makhanev A.S. ©   (2004-08-24 22:15) [3]

Создаём окно следующим образом:

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;

   FWindowHandle := CreateInVisibleWindow("MyWndClass", MyWndProc);


> Cobalt ©   (24.08.04 19:58) [1]
> Может, ему присылаются какие левые сообщения? с левыми адресами?
> Особенно, если ты сам их ему посылаешь.


Шлю я и шлет винда (в основном WM_GETTEXT).
Странно то, что глюк был 1 раз. А этот код тестировался регулярно несколько месяцев.


> Или объект уже разрушен - тогда FWindowHandle валит.

как может валить FWindowHandle? Он же не объект, а HWND = type Longword.


 
GuAV ©   (2004-08-25 02:09) [4]


>      SetWindowLong(Result, GWL_WNDPROC, Longint(MakeObjectInstance(Method)));

А чем бы сразу не задать WindowProc ?
И зачем этот MakeObjectInstance(Method) ? Имхо проще объявить её стандартной:
function MyWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;


 
Cobalt ©   (2004-08-25 07:42) [5]

Ну дык...
метод - чей? раз
2-е - сюдя по тексту, ты собрался делать собственную обёрткку вместо TWinControl, не зная броду сунулся в воду.

Нафига? Какую ты преследуешь цель?!


 
Cobalt ©   (2004-08-25 07:43) [6]

P.S. Анкету обнови



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

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

Наверх




Память: 0.46 MB
Время: 0.036 c
1-1095335590
gsk
2004-09-16 15:53
2004.10.03
TStringList


14-1095338151
infom
2004-09-16 16:35
2004.10.03
Как у вас с логикой ?


8-1089107085
Aplay
2004-07-06 13:44
2004.10.03
Приближение и отдалиние изображении


4-1092050754
stas_x
2004-08-09 15:25
2004.10.03
Работа с фотокамерой


8-1089272832
Ale}{(is)
2004-07-08 11:47
2004.10.03
256-цветное изображение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский