Am 27.12.2021 um 14:05 schrieb Jens Kallup:
> Hallo,
>
> leider stürtzt das Programm in der unten aufgeführten Funktion
> immer ab - bei @checksum in der ShowMessage.
Auf das Absturzproblem hast Du ja bereits eine Antwort erhalten.
Mich würde jetzt mal noch interessieren, was die Profis hier zur
Struktur der Funktion sagen. Mir sind da ein paar Dinge aufgefallen, die
ich persönlich zumindest anders machen würde. Aber ich lerne auch gerne
dazu.
Zunächst hätte ich das Aufräumen nicht mit einem Label gemacht, sondern
mit einem try...finally Block. Auch die Abfragen auf 0 oder nil hätte
ich anders herum gestellt. Und bei ExitProcess wird das Programm doch
hart abgebrochen, was Speicherlecks zur Folge haben kann, oder? Da
könnte man im Fehlerfall noch eine Fehlervariable zurückgeben, die im
Hauptprogramm ausgewertert wird und dort ggf. das Programm sauber
beenden. Oder man erzeugt eine eigene Exception, auf die dann außerhalb
der Funktion reagiert wird.
function ComputePEChecksum(FileName: string): DWORD;
begin
try
...
if (... <> 0) then
begin
//weitermachen
result:=...;
end;
finally
// aufräumen
end;
end;
Holger