Ошибка доступа при вызове CreateWindowEx
От: Buratinos  
Дата: 27.09.04 08:06
Оценка:
При вызове функции CreateWindowEx происходит ошибка доступа памяти, каждый раз по разным адресам.
BCB6, Delphi7, WinXP SP1.
Вот код:

//-----------Project---------------------------------------------------------
#include <windows.h>
#include "uglyuck.hpp"
#pragma hdrstop
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
          SvcEntry();
        }
        catch (...)
        {
        }
        return 0;
}
//---------------------------------------------------------------------------


unit uGlyuck;

interface
procedure SvcEntry;

implementation

uses Windows;

const WndClsName: PChar  = 'DevNotHandlerWin';

function WinProc(hWind: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): integer;
begin
  Result:= DefWindowProc(hWind, uMsg, wParam, lParam);
end;



procedure SvcEntry;
var
  Mesg: MSG;
  hWin: HWND;
  WindowClass: TWNDCLASSEX;
  ClsAtom: ATOM;

begin
  WindowClass.cbSize:= sizeof(TWNDCLASSEX);
  WindowClass.style:= CS_DBLCLKS;
  WindowClass.lpfnWndProc:= (@WinProc);
  WindowClass.cbClsExtra:= 0;
  WindowClass.cbWndExtra:= 0;
  WindowClass.hInstance:= GetModuleHandle(nil);
  WindowClass.hIcon:= 0;//LoadIcon(nil, );
  WindowClass.hCursor:= 0;//LoadCursor(0, IDC_ARROW);
  WindowClass.hbrBackground:= 0;//HBRUSH(COLOR_BTNFACE);
  WindowClass.lpszMenuName:= nil;
  WindowClass.lpszClassName:= WndClsName;
  WindowClass.hIconSm:= 0;

  ClsAtom:= $0000;
  ClsAtom:= RegisterClassEx(WindowClass);
  if ClsAtom = 0 then begin
    Exit;
  end;
  hWin:= CreateWindowEx(0,
                        WndClsName,
                        'HandlerWindow',
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        CW_USEDEFAULT,
                        0,
                        0,
                        0,
                        nil);
  if hWin = 0 then begin
    UnregisterClass(pointer(ClsAtom), hInstance);
    Exit;
  end; //if



  while GetMessage(Mesg, 0, 0, 0) do begin
    TranslateMessage(Mesg);
    DispatchMessage(Mesg);
  end;

  UnregisterClass(pointer(ClsAtom), hInstance);
end;

end.



Спасибо за внимание.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.