이전 프로젝트의 소스를 얻었지만 작은 것들을 변경해야하지만 델파이 2010만으로 인해 커다란 문제가 발생했습니다.문자열 문제 Delphi 3에서 Delphi 2010로 마이그레이션
bbil = record
path : string;
pos: byte;
nr: Word;
end;
나중에 정의 파일에서 읽는 데 사용됩니다 :
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
가장 큰 문제는, 컴파일러가 타입 "문자열"에 동의하지 않는 정의 된 기록이있다
그가 "완결"을 원하기 때문에 기록. 그래서 "string"을 "string [255]"또는 "shortstring"으로 변경하려고했습니다. 이 응용 프로그램은 파일을 읽을 때 잘못된 내용으로 읽고 있습니다.
내 질문은 파일이 이미 예를 들어, 많은 노력 델파이 2010
에서 "새로운"유형에 기록 된로 이전 "문자열"형식을 변환하는 방법입니다 "{$ H-}". 레코드에서 하나의 char 만 추가하면 파일이 거의 정확하지만 각 데이터 세트가 더 잘릴 수 있기 때문에 파일이 올바른 것입니다. lengthbyte + 255chars의 길이는 정의보다 짧지 만 짧은 문자열은 맞지 않습니다.
에서 잘 읽을 것 그리고
: 나는 문자열처럼 고정 된 크기의 수 있도록 당신이 당신의 기록을 수정 제안 컴파일러 errror : "bbil의 finalization이 필요합니다"에서도 정의 결과를 기록합니다. 이런 방식으로 AnsiString을 단락 시키면 "pfad : AnsiString [255];" 또한 작동하지 않습니다 : "; 예상되지만 [found]. 내가 필요한 것은 ShortAnsiString인가? – rseffner
IMO는 델파이 3에서도 코드를 컴파일해서는 안됩니다. 'Path : AnsiChar의 배열 [0..N]을 시도하십시오. ', N은 어떤 상수, 아마도 255입니다. – kludg
David이 말한대로 문자열을 ShortString으로 선언하십시오. 레코드를 정렬하려면 압축 된 레코드 지시문을 사용하십시오. 이 코드가 D3에서 작동하려면 {$ H-} 지시문을 사용해야합니다. –