Hallo, ich würde mich gerne absichern ob folgender Code korrekt ist
...
Oder ist es generell so falsch und es gibt aktuellere Methoden um das Zeichen (als String) zu bekommen?
Gegenfrage: Warum hörst du nicht auf deinen Compiler? (vonwegen Variable nicht initialisiert)
buf := StrAlloc(10); // puffer eine größe zusichern
gehört vor das TRY
und
Result := StrPas(buf);
gehört vor Finally oder hinter das End.
Falls StrAlloc knallt, führst du dennoch StrDispose aus, es knallt nochmal und verfälscht den eigentlichen Fehler
und wenn es knallt, greifst du auch noch auf buf zu, was ebenfalls nicht gut ist.
UND, diese
API löst keine Exceptions aus,
also hilft Try-Finally/Except garnichts.
Und falls es doch knallt, dann hattest
DU "buf" falsch/nicht initialisiert
oder es ist so viel kaputt, dass eine Fehlerbehandlung eh sinnlos ist. (ist = war vorher schon)
Zitat:
falsch initialisieren, gegebenfalls später mit einem Default-Wert bei Fehler ersetzen
Und wie willst du erkennen, ob es einen Fehler gab, wenn du das Result dieser
API nicht auswertest?
PS: Wenn ich Code als "Delphi/Pascal" implementiere, dann lasse ich das C-typische StrAlloc weg und nutzte einen passenden Delphi-String (AnsiString/UnicodeString/String)
und das StrDispose macht Delphi für mich.
Nach der
API mit SetLength oder einem billigen PChar-Cast den String kürzen, falls der Inhalt doch kleiner war.
Oder ich nutze ein statisches Char-Array und
SetString