AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verhindern, dass eine Funktion zwei mal den gleichen Parameter nutzt
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern, dass eine Funktion zwei mal den gleichen Parameter nutzt

Ein Thema von Alallart · begonnen am 2. Sep 2025 · letzter Beitrag vom 3. Sep 2025
 
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.111 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verhindern, dass eine Funktion zwei mal den gleichen Parameter nutzt

  Alt 2. Sep 2025, 18:21
Alleine ein VAR anstelle des OUT bringt nicht wirklich eine Veränderung/Lösung.


Jupp, eigentlich würde OUT hier die automatische Speicherverwaltung eines Strings zerschießen,
aber Delphi macht hier heimlich ein VAR aus dem OUT.
Alleine das Erklärt bereits, warum es nichts ändern wird.
Das stimmt nicht. Das kannst du leicht testen:
Delphi-Quellcode:
function StrToBase64(Str: string; var Base64Str: string): Byte;
begin
  Base64Str := '';
  Base64Str := Str;
end;

procedure Test;
var
  a, b: string;
begin
  a := 'Test';
  StrToBase64(a, a);
  ShowMessage(a);
end;
Mit var kommt da "Test" heraus, mit out ein Leerstring.

// EDIT: Wobei ich nicht sicher bin, ob das Verhalten in der Doku genau genug definiert ist, um sich darauf auch bei zukünftigen Delphiversionen zu verlassen. Ich habe nicht nachgeschaut.

Oder ganz zu Beginn Str in eine lokale Variable kopieren,
welche aber lange genug existieren muß, was nicht automatisch sichergestellt ist.
Das bringt nichts, da Delphi den String dort schon abgeräumt hat, also vor dem begin.

Delphi-Quellcode:
S := 1.ToString;
StrToBase64(S, S);

function StrToBase64(Str: string; out Base64Str: string): Byte;
begin
  Base64Str := '';
  ShowMessage(Str); // hier kommt '1' raus
Delphi-Quellcode:
S := 1.ToString;
S2 := S;
StrToBase64(S, S);

function StrToBase64({const} Str: string; out Base64Str: string): Byte;
begin
  Base64Str := '';
  ShowMessage(Str); // hier kommt '1' raus, egal ob mit oder ohne const
(hab das jetzt nicht getestet, aber rein logisch müsste es passen)
Du solltest es testen. Es stimmt leider nicht.

Den Vergleich hatte ich auch ausprobiert. Da darf nur nicht geprüft werden, ob Str <> '' ist wie in deinem Code, sondern nur der Pointer verglichen werden.
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 2. Sep 2025 um 18:24 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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