Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#23

Re: Warum ist ein Boolean so groß?

  Alt 26. Okt 2005, 19:47
Beispiel: Der Rückgabewert der Win32-API-Funktion GetMessage() ist von Borland 1:1 als BOOL(LongBool) übersetzt worden:function GetMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax: UINT): BOOL; stdcall; Der Grund dafür ist relativ ersichtlich, da die Dokumentation besagt, dass die Funktion bei WM_QUIT 0 zurückgibt und anderfalls einen Wert ungleich 0.

Deshalb sehen viele Nachrichtenschleifen von Fenstern so aus:
Delphi-Quellcode:
while GetMessage(Msg, Wnd, 0, 0) do
begin
  // ...
end;
ExitCode := Msg.wParam;
Allerdings besagt die Dokumentation auch, dass in einem Fehlerfall (z.B. ungültiges Fenster-Handle) -1 zurückgegeben wird. Der Code sollte also 'besser' so aussehen (um eine Endlosschleife im Fehlerfall zu vermeiden):
Delphi-Quellcode:
while True do
  case Longint(GetMessage(Msg, Wnd, 0, 0)) of
    0: // WM_QUIT
      begin
        ExitCode := Msg.wParam;
        Break;
      end;
    -1: // ERROR!
      begin
        ExitCode := 42;
        Break;
      end;
  else
    //...
  end;
  Mit Zitat antworten Zitat