在Delphi 2010中停用巨大的字符串

mro*_*ney 5 delphi string delphi-2010

我是Delphi的新手,我正在将一个非常古老的Delphi项目迁移到Embarcadero RAD Studio 2010.我发现使用字符串时遇到了问题.这是代码:

ProgramaResultadosType = record
    Version: string;
    TituloPrincipal   : string;
    BloquesResultados : VectorBloquesResultadosType;
end;

FileOfProgramaResultadosType  = file of ProgramaResultadosType;
Run Code Online (Sandbox Code Playgroud)

错误......

"E2155类型'%s'需要最终确定 - 文件类型不允许"

我知道当你没有指定字符串大小时,对于许多delphi开发人员来说这是一个众所周知的错误.

基本上我想停用像旧版RAD Studio一样的巨大字符串指令,但我在2010版本中找不到.

Arn*_*hez 10

只需使用:

ProgramaResultadosType = record
    Version: shortstring;
    TituloPrincipal   : shortstring;
    BloquesResultados : VectorBloquesResultadosType;
end;
Run Code Online (Sandbox Code Playgroud)

但请注意:

  • 几乎每次调用RTL函数都会首先对新string类型进行不可见的转换:string在阅读完shortstring内容之后,最好使用另一个显式变量;
  • 在较新版本的Delphi(从Delphi 2009开始)中,string是一个Unicode字符串:因此,当您shortstring从一个(从一个Ansi字符串)写入时,您可能会丢失一些数据UnicodeString;
  • ProgramaResultadosType = packed record如果您的应用程序非常老旧(默认路由在Delphi 4,AFAIR周围更改),则可能需要添加.

所以你可能必须:

  • 使用上述结构阅读现有内容;
  • 使用新的范例编写,Unicode就绪(例如,像Midas,SQLite3或任何其他的嵌入式数据库).

将现有应用程序转换为更新的Unicode版本的Delphi时值得一读: