Zitat von
onzelonz:
[/delphi]except
MessageDlg(IntToStr(GetLastError)+':hnd', mtError, [mbOK], 0);
end;[/delphi]
Entweder es ist ein
API-Fehler, welcher in GetLastError zurückgeliefert wird
oder es ist eine
Exception, deren Information im
Exception-Objekt drinsteht.
Exceptions sollte man eigentlich auch nicht einfach so abfangen und unbehandelt in nichtssagende Meldungen umwandeln:
Delphi-Quellcode:
function TConThread.getPrt(Port:
String): Boolean;
var
ComFile : THandle;
begin
ComFile := CreateFile(PChar(Port), GENERIC_READ
or GENERIC_WRITE,
0,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := ComFile <> INVALID_HANDLE_VALUE;
if Result
then
CloseHandle(ComFile)
else
Raise Exception.Create(SysErrorMessage(GetLastError));
end;
aber wenn du unbedingt Exeptions unterdrücken willst, dann zeige wenigsten die "richtigen" Fehlermeldungen an:
Delphi-Quellcode:
function TConThread.getPrt(Port:
String): Boolean;
var
ComFile : THandle;
begin
try
ComFile := CreateFile(PChar(Port), GENERIC_READ
or GENERIC_WRITE,
0,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := ComFile <> INVALID_HANDLE_VALUE;
if Result
then
CloseHandle(ComFile)
else
MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
except
on e:
Exception do
MessageDlg(E.
Message, mtError, [mbOK], 0);
end;
end;
Ohne Exceptionbehandlung und da die
WinAPI nur selten mit Exceptions um sich wirft, sondern vorwigend GetLastError nutzt und da CloseHandle bei einem INVALID_HANDLE_VALUE nichts macht:
(falls man doch die Meldung haben will, dann Diese einfach auskommentieren)
Delphi-Quellcode:
function TConThread.getPrt(Port: String): Boolean;
var
ComFile : THandle;
begin
ComFile := CreateFile(PChar(Port), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
CloseHandle(ComFile);
Result := ComFile <> INVALID_HANDLE_VALUE;
//if not Result then
// MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
end;