Also schonmal ein Dankeschön an shmia und himitsu für die doch recht ausführlichen Erklärungen über try Except.
@shmia
Ich hab mir deinen Lesestoff mal zu Gemüte geführt und es ist auch sehr informativ. Habe auch glaube ich ein paar Prozeduren genommen, wo ich für mich selber festgestellt habe, dass auch wenn die Aufrufe ins Nirvana gehen (z.B. wenn die Karte gar nicht angeschlossen ist) gar keine
Exception erzeugen. Bin mir bei diesen Proceduren auch noch nicht sicher, ob ich dann die Exceptions drin lassen sollte oder sie wieder rausnehme.
Habe hier mal ein anderen Programmteil aus dem Projekt genommen und würde gern mal eure Meinung dazu hören, ob sinnvoll oder ob nicht sinnvoll oder vieleicht Verbesserungen möglich wären. Ich bitte dabei zu beachten, dass es sich dabei um meinen ersten Versuch handelt, mit Exceptions umzugehen und Fehlercodes in mein Programm einzubauen.
Delphi-Quellcode:
function TControlerBoard.DLLHandle_zuweisen: boolean;
begin
//Protokoll.Protokolleingang('ControlerBoard', 'DLLHandle-Fkt');
Fehlermeldung(300);
try
ControlerDLL := TDLL_Datei.create('
K8055D.DLL');
if ControlerDLL.Vorhanden
then
begin
DLL_Handle := ControlerDLL.Handle;
result := true;
end
else
begin
Fehlermeldung(301);
DLL_Handle := 0;
result := false;
end
except
Fehlermeldung(302);
result := false;
end;
//Protokoll.Protokollausgang('ControlerBoard', 'DLLHandle-Fkt');
end;
function TControlerBoard.DLLFunktionen_laden: boolean;
begin
//Protokoll.Protokolleingang('ControlerBoard', 'DLL-Fkt laden');
try
if DLL_Handle <> 0
then
begin
@OpenDevice := GetProcAddress(DLL_Handle, '
OpenDevice');
@CloseDevice := GetProcAddress(DLL_Handle, '
CloseDevice');
@ClearAllAnalog := GetProcAddress(DLL_Handle, '
ClearAllAnalog');
@ClearAllDigital := GetProcAddress(DLL_Handle, '
ClearAllDigital');
@ClearAnalogChannel := GetProcAddress(DLL_Handle, '
ClearAnalogChannel');
@ClearDigitalChannel := GetProcAddress(DLL_Handle, '
ClearDigitalChannel');
@OutputAnalogChannel := GetProcAddress(DLL_Handle, '
OutputAnalogChannel');
@SetDigitalChannel := GetProcAddress(DLL_Handle, '
SetDigitalChannel');
@ReadDigitalChannel := GetProcAddress(DLL_Handle, '
ReadDigitalChannel');
result := true;
end
else
begin
Fehlermeldung(303);
result := false;
end
except
Fehlermeldung(304);
result := false;
end;
//Protokoll.Protokollausgang('ControlerBoard', 'DLL-Fkt laden');
end;
function TControlerBoard.Initialising:boolean;
begin
try
if (DLLHandle_zuweisen = true)
and (DLLFunktionen_laden = true)
then
begin
OpenDevice(0);
ClearAllDigital;
{Liste der einzuschaltenen Geräte per Funktion hier einfügen}
V_Tische_Stromversorgung_einschalten;
P_Tisch_Stromversorgung_einschalten;
Spleissgeraet_einschalten;
result := true;
end
else
begin
Fehlermeldung(305);
result := false;
end
except
Fehlermeldung(306);
result := false;
end;
end;
Ok ich denke, da ich fast alle Units ähnlich wie diese aufgebaut habe, ist die Vorgehensweise erkennbar. Die "Fehlermeldung(...)" ist dabei für mich eine Meldefunktion an eine Fehlerklasse, die anhand der Nummer den auftretenden Fehler zum Teil genau aber in einigen Fällen auch nur in einem gewissen Rahmen qualifiziert. In der Fehler-Klasse werden die übergebenen Nummern interpretiert und dann in eine Fehler-Log-Datei eingeschrieben. Bisher bin ich mit der Methode eigentlich zu frieden, da ich darüber mein Programm auch wenn bestimmte Geräte (wie z.B. die Controler-Board-Karte) nicht angeschlossen sind, starten kann und über den Status im Programm der Bediener mitbekommt, was genutzt werden kann und was er vieleicht doch nochmal einschalten muss oder was nicht funktioniert.
Über konstruktive Kritik würde ich mich sehr freuen.