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

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

Странная ошибка [D7, WinXP]


Sphinx ©   (2005-08-25 18:13:00) 

Уже сотни раз писал на API код создания окна...но тут споткнулся на ровном месте, не могу понять в чем ошибся...

Следующий код выдает AV на строке CreateWindowEx
Причем проверил - в FPC 2.0; D7 и D2005...
AV выпадает везде...или у меня уже взгляд "замылился" и ошибки не вижу...или что ???

program Project1;

{$R *.res}

uses
 Windows,
 Messages,
 Direct3D9;

var
 g_hWnd        : THandle;
 winClass      : WNDCLASS;
 uMsg          : MSG;
 g_pwndClass   : PChar;

function WindowProc(ihwnd: THandle; uMsg: Longword; wParam: Longint; lParam: Longint): Longint;
begin
 WindowProc := DefWindowProc(ihwnd, uMsg, wParam, lParam);
end;

procedure Init;
begin
end;

procedure ShutDown;
begin
end;

begin
 ZeroMemory(@uMsg, SizeOf(MSG));
 ZeroMemory(@winClass, SizeOf(WNDCLASS));

 winClass.hInstance := HInstance;
 g_pwndClass := 'MY_WINDOW_CLASS';

 with winClass do
   begin
     lpszClassName := g_pwndClass;
//      cbSize        := SizeOf(WNDCLASSEX);
     style         := CS_VREDRAW or CS_HREDRAW;
     lpfnWndProc   := @WindowProc;
//      hInstance     := HInstance;
     hCursor       := LoadCursor(0, IDC_ARROW);
     hbrBackground := $000000;
     lpszMenuName  := nil;
     cbClsExtra    := 0;
     cbWndExtra    := 0;
   end;

 if (RegisterClass(winClass) = 0) then
   Halt(0);

 g_hWnd := CreateWindowEx(0,
                          'MY_WINDOW_CLASS',
                          '',
                          WS_OVERLAPPED,
                          10,
                          10,
                          640,
                          480,
                          0,
                          0,
                          winClass.hInstance,
                          nil);

 if (g_hWnd = 0) then
   Halt(0);

 ShowWindow(g_hWnd, SW_SHOW);
 UpdateWindow(g_hWnd);

 Init;

 while uMsg.message <> WM_QUIT do
   begin
     if PeekMessage(uMsg, 0, 0, 0, PM_REMOVE) then
       begin
         TranslateMessage(uMsg);
         DispatchMessage(uMsg);
       end
     else
       begin
       end;
   end;

 ShutDown;

 UnregisterClass(winClass.lpszClassName, winClass.hInstance);
end.


Sphinx   (2005-08-25 18:23:00) [1]

2 alpet ©
Блллллиииииннннннннннн !!!!

Не копипастил я...сам писал...
Огромное спасибо :)

З.Ы. этож надо на такой фигне погореть %)


alpet   (2005-08-25 18:19:00) [2]

Пользоваться отладчиком надо. Ты проглядел stdcall в определении оконной процедуры, видать сотни раз приходилось использовать технологию Copy-Paste, вот и не отложилось в памяти :) Соответственно, при вызове CreateWindowEx первые сообщения, отправленные в нее вызовут непредсказуемые проблемы.


Наверх

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