Thema: Delphi Handle auf ComPort

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Handle auf ComPort

  Alt 14. Apr 2010, 11:26
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;
$2B or not $2B
  Mit Zitat antworten Zitat