Wie kann ich in einem TRY...EXCEPT Block die ausgelöste Exception als numerischen Fehlercode erhalten?
Hintergrund: Ich schreibe gerade ein kleines Konsolen-(Hilfs)-Programm welches direkt Port-Adressen liest und beschreibt. Das geht in Linux ja nur als "root" und deshalb darf das "große" Lazarus-GTK-Programm nicht mit sudo als root gestartet werden, sondern ruft über die shell mit pipe das kleine Hilfsprogramm auf. Das muss alles sehr schnell gehen (ich lese einen externen Elektronikbaustein über den parallelen Port aus), und ich möchte bei Fehlern keine langen Strings auswerten müssen, sondern wie früher beim guten alten TurboPascal einfach als Rückgabewert "5" (access denied, du warst nicht root) oder "2" (file not found) oder sowas erhalten.
Aber... irgendwie seh ich den Wald vor lauter Bäumen nicht:
so geht's natürlich (F ist die Port-Datei unter Linux /dev/port):
Code: Alles auswählen
TRY
Reset (F, 1);
{ ... }
{ Lesen der 12 Bits vom ADC mit vielen Sachen die schief gehen können }
Close (F);
{ ... }
EXCEPT
ON E : Exception DO Result := E.ClassName + ' ' + E.Message;
End; { End Try..Except }
Code: Alles auswählen
TRY
Reset (F, 1);
{ ... }
{ Lesen der 12 Bits vom ADC mit vielen Sachen die schief gehen können }
Close (F);
{ ... }
EXCEPT
ON E : Exception DO Result := E.Fehlernummer;
End; { End Try..Except }
Und um welche Funktionen muss das drum? Nur ums File Reset oder auch um jeden BlockRead und BlockWrite Befehl?? Und dann jedesmal abfragen ???
(Da wäre die TRY...EXCEPT Methode schon einfacher)
P.S. Wenn das mal funktionieren wird, veröffentliche ich gern den Code, denn meine Herausforderung ist, einen 12-bit ADC über die parallele 8-bit Schnittstelle auszulesen.