![]() |
String Zuordnung = AV
Hi,
Hab etwas, was ohne Probleme funktioniert wenn ichs mit D2007 compiliere. Wenn ich den selben Code mit D7 compiliere bekomme ich eine AV.
Delphi-Quellcode:
Das lief auch unter D2007 wunderbar. Unter D7 kommt es jedoch manchmal (ka wann und warum) bei dieser Zeile:
TGUILang = packed record
Install: ShortString; Cancel: ShortString; btnFinish: ShortString; Head: ShortString; Agree: ShortString; lblFinish: ShortString; Exit: ShortString; end; // [...] var tmp: PChar; st: TAKClass; // st.FStrings: TStringlist; begin // ... tmp := PChar(@GUI.Langs[j]); // GUI.Langs: Array[1..5] of TGUILang; inc(tmp); // Um zum ersten String zu gelangen for i := x to y do //x,y sind nicht so wichtig begin st.FStrings[i] := StringReplace(tmp,'\n',#13#10,[rfReplaceAll,rfIgnoreCase]); inc(tmp,256); end;
Delphi-Quellcode:
zu einer AV. Und ich kann garantieren das FStrings[i] jederzeit existiert. schreibe ich statt
st.FStrings[i] := StringReplace(tmp,'\n',#13#10,[rfReplaceAll,rfIgnoreCase]);
Delphi-Quellcode:
das hier
st.FStrings[i] := st.FStrings[i] := StringReplace(tmp,'\n',#13#10,[rfReplaceAll,rfIgnoreCase]);
Delphi-Quellcode:
dann gibts kein Fehler -.-
st.FStrings[i] := st.FStrings[i] := 'IrgendeinString';
Ich hab das irgendwie versucht durch irgendein gematsche hinzubekommen aber ich raste gleich aus glaub ich. Gruß Neutral General |
Re: String Zuordnung = AV
Hi,
versuch mal einen Zwischenschritt um die Position des Fehlers genauer einzugrenzen
Delphi-Quellcode:
Ich vermute den Fehler beim Zugriff auf dein tmp...
for i := x to y do //x,y sind nicht so wichtig
begin tempstring : = StringReplace(tmp,'\n',#13#10,[rfReplaceAll,rfIgnoreCase]); st.FStrings[i] := tempstring; inc(tmp,256); end; Gruss |
Re: String Zuordnung = AV
Hallo
Was machst du da !!! :evil: Dein Problem ist bei
Delphi-Quellcode:
Du verwendest hier unnötigerweise PChars.
StringReplace(tmp...
StringReplace erwartet hier eine String uind keinen PChar. Desweiteren hast du ein Inc(tmp)!!! darin. Damit zeigts du nicht mehr auf das Längebyte an Position 0 eines Shortstring sondern auf das erste Zeichen. Du weist, daß ein PChar mit einer #0 beendet wird und derr Kommt wann ? Also versuchs bitte mal nur mit Strings. |
Re: String Zuordnung = AV
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: String Zuordnung = AV
Zitat:
bei shortstring gibt es kein abschließendes #0. Deswegen steht ja vorne die Länge drin. Shortstring stammt noch aus der Turbo Pascal Zeit. Gruss |
Re: String Zuordnung = AV
Zitat:
|
Re: String Zuordnung = AV
ShortStrings werden grundsätzlich nicht initialisiert. Wenn man ihnen keinen Wert zuweist, haben sie einen mehr oder weniger zufälligen Wert.
|
Re: String Zuordnung = AV
Hallo
@Muetze1: Ich glaube ich habe mich etwas in falscher Reihenfolgte ausgedrückt. Natürlich hast du mit dem Recht was du anmerkst. Das Problem ist aber meiner Meinung nach der Inc(pChars) mit anschliessendem Verwenden in StringReplace wobei die abschliessende NULL nicht geklärt ist... |
Re: String Zuordnung = AV
genau, bei einem ShortString ist die Länge ausnahmslos durch das Längenbyte festgelegt
und eine abschließende #0 ist laut Definition nicht vorgesehn. bleib einfach bei (P)ShortString:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var P: PChar; st: TAKClass; // st.FStrings: TStringlist; begin // ... P := @GUI.Langs[j]; for i := x to y do //x,y sind nicht so wichtig begin st.FStrings[i] := StringReplace(PShortString(P)^, '\n', #13#10, [rfReplaceAll,rfIgnoreCase]); inc(P, SizeOf(ShortString)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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