Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
11. Feb 2021
Hach, an was man sich so alles gewöhnen könnte.
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Structured_Types_(Delphi)#String-Like_Operations_Supported_on_Dynamic_Arrays
Temp: TArray<AnsiString>;
for S in FileList do
begin
Temp := Temp + ;
FParameters := FParameters + )];
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
11. Feb 2021
Du muß die generierten AnsiString für jede Zeilen bis zum Ende von PDFMerge gespeichert haben, (also irgendwo genügend AnsiString-Variablen für jedes Item)
dann bleiben die PAnsiChar-Referenzen auch so lange gültig.
(alternativ kann man auch an der Referenzzählung rumpfuschen ... und Dieses am Ende wieder rückgängig, weil sonst Speicherleck)
Oder du erstellst eben für jeden PAnsiChar einen...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
11. Feb 2021
Und was hatte ich zum AnsiString-Cast gesagt?
FParameters := PAnsiChar(AnsiString(FileList));
// Delphi macht daraus ein
ImpliziteAnsiStringVariable := AnsiString(FileList);
FParameters := PAnsiChar(ImpliziteAnsiStringVariable);
Also ist das Selbe, wie mit deiner expliziten Temp-Variable.
Temp := IntToStr(A);
FParameters := PAnsiChar(AnsiString(Temp));
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
11. Feb 2021
siehe mein letzter Post.
Nein, du weißt einen "anderen" String (nach Funktionsaufruf IntStStr(S) oder Typecast ala Ansistring(S) ) als PChar zu.
Und im nächsten SchleifenDurchlauf nochmal genau die selben Variablen, wodurch ihr vorherriger Inhalt überschrieben wird und deine alten Zeiger somit ins Nirvana zeigen.
egal ... darfst gern ein Array-of-AnsiString in ein Array-of-PAnsiChar...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
11. Feb 2021
Nein, mit PChar auf einen veränderlichen String geht sowas garnicht.
Delphi nutzt für das Result dieses IntToStr-Aufrufs (PAnsiChar(IntToStr(I))) die selbe Variable, denn es ist in der Schleife auch der selbe Code :zwinker:, also im nächsten Durchlauf sind somit die vorherigen Pointer ungültig.
Selbes gilt in Schleifen für alle Funktionsaufrufe und Casts.
Und du kannst froh sein, dass hier...