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

Вниз

Откуда здесь 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
14-1093155435
Art_Z
2004-08-22 10:17
2004.10.03
Помогите!!!


1-1095182505
Сергей
2004-09-14 21:21
2004.10.03
Текстуру на форму.


1-1094818246
TUser
2004-09-10 16:10
2004.10.03
Память и указатели


14-1095032103
Monster
2004-09-13 03:35
2004.10.03
Нужен исходник!


6-1090677043
Skyhawk
2004-07-24 17:50
2004.10.03
Remote Control





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