Ho avuto la fonte di un progetto più vecchio e devo cambiare piccole cose ma ho avuto grossi problemi a causa del solo delphi 2010 per farlo.problemi di stringa migrare Delphi 3 a Delphi 2010
C'è un record definito: dopo
bbil = record
path : string;
pos: byte;
nr: Word;
end;
questa definizione viene utilizzata per leggere dal file:
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
Il problema principale è, il compilatore non accetta il tipo "stringa" in il record perché vuole una "finalizzazione". Così ho provato a cambiare "stringa" in "stringa [255]" o "stringhe". In questo modo l'app sta leggendo il file ma con contenuti errati.
La mia domanda è come convertire il vecchio tipo "string" con cui sono stati scritti i file per i "nuovi" tipi in Delphi 2010.
ho già provato un sacco per esempio "{$ H-}". Aggiungendo solo un carattere in più nel record, il file è corretto, poiché il file viene letto quasi corretto ma troncato un carattere in più ogni set di dati - la lunghezza della lunghezza + 255 caratteri sembra essere corretta fpr la definizione ma la stringa non corrisponde.
Utilizzando AnsiString nel la definizione della registrazione risulta anche in un errore del compilatore: "la finalizzazione di bbil è necessaria". Abbreviando questi AnsiString in questo modo "pfad: AnsiString [255];" non funziona anche: "; atteso ma [trovato". Quello di cui ho probabilmente bisogno è una ShortAnsiString? – rseffner
IMO il tuo codice non dovrebbe essere compilato anche in Delphi 3; prova 'path: array [0..N] di AnsiChar;', dove N è un costante, forse 255. – kludg
Fai come dice David, dichiara la stringa come 'ShortString'. Per l'allineamento del record, provare la direttiva del pacchetto compresso se ciò aiuta. Perché questo codice abbia funzionato in D3, deve essere stata utilizzata la direttiva {$ H-}. –