Главная страница
    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.042 c
1-1095221002
Fedia
2004-09-15 08:03
2004.10.03
Изменение значений шаблона MS Word


11-1080899829
*pavel
2004-04-02 13:57
2004.10.03
ImageShow


14-1094898124
Delpher
2004-09-11 14:22
2004.10.03
Изучение Delphi


1-1095259544
Relaxxx
2004-09-15 18:45
2004.10.03
Как мне у предложения отрезать последнее слово и записать.....


4-1093455004
Dimka-gl
2004-08-25 21:30
2004.10.03
темы WinXP





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