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

时间:2012-04-20 02:00:36

标签: string delphi delphi-2010

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

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

FileOfProgramaResultadosType  = file of ProgramaResultadosType;

错误......

  

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

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

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

1 个答案:

答案 0 :(得分:10)

请改用:

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

但请注意:

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

所以你可能需要:

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

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