Mam źródło starszego projektu i muszę zmienić małe rzeczy, ale mam duże kłopoty, ponieważ mam tylko delphi 2010, aby to zrobić.Problemy z ciągami migracyjnymi Delphi 3 do Delphi 2010
Jest rekord zdefiniowane:
bbil = record
path : string;
pos: byte;
nr: Word;
end;
później definicja ta służy do odczytu z pliku:
b_bil: file of bbil;
pbbil: ^bbil;
l_bil : tlist;
while not(eof(b_bil)) do
begin
new(pbbil);
read(b_bil, pbbil^);
l_bil.add(pbbil);
end
Podstawowym problemem jest to, że kompilator nie akceptuje typu „string” w rekord, ponieważ chce "finalizacji". Próbowałem więc zmienić "ciąg" na "string [255]" lub "shortstring". W ten sposób aplikacja odczytuje plik, ale zawiera niewłaściwą treść.
Moje pytanie brzmi: jak przerobić starego typu „string” z których pliki zostały zapisane do „nowych” typów w Delphi 2010.
Próbowałem już wiele np "{$ H-}". Dodanie tylko jednego znaku więcej w pokazach rekordów, plik jest poprawny, ponieważ plik jest prawie poprawny, ale skrócono o jeden znak więcej każdego zbioru danych - długość długości bajty + 255 znaków wydaje się być poprawna, ale skrót nie pasuje.
Korzystanie AnsiString w wyniki definicji rekordu również w erraty kompilatora: "finalizacja potrzebnego bbil". Skracając te AnsiString w ten sposób "pfad: AnsiString [255];" nie działa również: "; oczekiwano, ale [znaleziono". Co prawdopodobnie potrzebuję to ShortAnsiString? – rseffner
IMO Twój kod również nie powinien się kompilować w Delphi 3; spróbuj 'path: array [0..N] z AnsiChar;', gdzie N jest trochę stałą, może 255. – kludg
Zrób tak, jak mówi David, zadeklaruj ciąg jako 'ShortString'. Aby dopasować rekord, spróbuj dyrektywy dotyczącej spakowanego rekordu, jeśli to pomaga. Aby kod ten działał w D3, musiano użyć dyrektywy {$ H-}. –