![]() |
Exceptions
Delphi-Quellcode:
function ReadRegString(const KEY_NAME: HKEY; KeyPath, Key: string): string;
var KeyH : HKEY; dwLen : DWORD; value : string; begin Result := ''; if RegOpenKeyEx(KEY_NAME, PAnsiChar(KeyPath), 0, KEY_READ, KeyH) = ERROR_SUCCESS then Try Try dwLen := 0; if RegQueryValueEx(KeyH, PAnsiChar(Key), nil, nil, nil, @dwLen) = ERROR_SUCCESS then begin Setlength(value, dwLen - 1); if RegQueryValueEx(KeyH, PAnsiChar(Key), nil, nil, @value[1], @dwLen) = ERROR_SUCCESS then Result := value else Error(1); end else Error(1); except Error(1); end; Finally RegCloseKey(KeyH); end end; moin! sind die "Try's" unnütz hier? ich weiss nämlich nicht ob es irgendeine api funktion gibt die eine exception auslöst :oops: Und nochwas dazu...wie man sieht steht da 3mal "Error(1);" je nachdem ob irgendwas von den 3 if anweisungen nicht geklappt hat soll halt der fehler "1" an eine funktion übergeben werden....kann man das auch ohne das man es direkt jeder if anweisung im else teil angeben muss? also nur 1mal? |
Re: Exceptions
Soviel ich weiß lösen WinAPI-Funktionen keine Exceptions aus, aber es gibt (meistens negative) Rückgabewerte, welche einen Fehler signalisieren. Mit Hilfe derer kannst du das Ganze steuern.
Bezüglich dem Error(1): Du könntest mit einer Booleanvariable arbeiten, aber ich verstehe nicht, was dich daran so stört. |
Re: Exceptions
Ich vermute das Error() selber eine Exception auslösst, und somit wären die try finallys nötig.
Der Code ansich ist Bulletproof und meiner Meinung nach ein guter Source. Gruß hagen |
Re: Exceptions
danke :)
|
Re: Exceptions
Ich persönlich habe Bedenken deswegen:
Zitat:
Zitat:
Zitat:
|
Re: Exceptions
PS:
Zitat:
Delphi-Quellcode:
Und am Ende, nach dem Schließen des Registryschlüssels, wertest du die Variable dann aus:
boolRes := RegQueryValueEx(...) = ERROR_SUCCESS;
if(boolRes) then begin { ... } end;
Delphi-Quellcode:
Und IMHO ist zumindest dieses try/except überflüssig:
if(not boolRes) then Error(1);
Code:
Try
[color=red]Try[/color] { ... } [color=red]except Error(1); end;[/color] Finally RegCloseKey(KeyH); end |
Re: Exceptions
danke, besonders das letzte beispiel mit der booleschen variable hat mir geholfen ;)
|
Re: Exceptions
Ja, trotzdem noch eine Anmerkung: Du solltest die Typprüfung nicht vergessen:
Code:
Im Moment kann man mit der Funktion auch alles andere auslesen, also DWORDS usw., und nicht bloß Strings. Es passiert zwar nichts, aber man sieht natürlich auch bloß wieder die "Vierecke", weil es sich eben nicht um einen String handelt. ;)
if RegQueryValueEx(KeyH, PAnsiChar(Key), nil, [color=red]nil[/color], nil, @dwLen)
|
Re: Exceptions
danke, daran hatte ich (noch) nicht gedacht :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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