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;