![]() |
Exit-Funktion erweitern
Guten Morgen zusammen,
zur Zeit arbeite ich intensiv mit DLLs und habe deshalb eine GetLastError-Funktion. Diese wird natürlich mit eine SetLastError-Funktion intern gefüttert. Jetzt bin ich aber an einem Punkt, andem soetwas wie eine Exit-SetLastError-Funktion nützlich wäre. Also die ErrorVariable gesetzt wird und die Funktion beendet. Prinzipiell müsste ich doch einfach nur den Stack soweit zurück springen bis ich wieder beim Caller bin. Beispiel:
Delphi-Quellcode:
Ist sowas möglich? Naja warscheinlich schon, allerdings sehr unsauber oder?
// In der DLL
function ReadAll(Stream : TMyStream) : PChar; stdcall; begin // LastError wird zu INVALID_PARAM, Result = nil, Ausgang von ReadAll if Stream = nil then SetLastErrorExit(BASE_ERR_INVALID_PARAM, nil) else begin .. end; end; // Im Programm function Test() : Boolean; var Stream : TMyStream; begin Stream := TMyStream.Create; // Beispiel // Ich rufe eine Funktion meiner DLL auf if ReadAll(Stream) = nil then ShowMessage(Format('Fehler: %d', [GetLastError])); Stream.Free; end; Mfg Desmu |
Re: Exit-Funktion erweitern
Zum einen ist mir nicht bekannt, das Strings nil sein können (das C NULL wäre hier ''). Außerdem finde ich wäre es wohl besser, wenn du kritische Blöcke mit try ... except umfasst und dort die Fehler abfängst mithilfe von Exceptions und nicht mit Error-Meldungen um dich schmeißt, weil du da mal ganz schnell auch Windows-Fehler die für dich von Bedeutung sein könnten untergraben wirst.
|
Re: Exit-Funktion erweitern
Zitat:
Meine Frage ist jetzt, ob es nicht möglich wäre, eine Funktion zum beenden des Aufrufs, wie oben zu erstellen, in der LastError gesetzt wird, ein Rückgabewert gesetzt werden kann und die Funktion, die Aufgerufen wurde beendet wird. |
Re: Exit-Funktion erweitern
Zitat:
Zitat:
|
Re: Exit-Funktion erweitern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz