5

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

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

FileOfProgramaResultadosType  = file of ProgramaResultadosType;

而错误...

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

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

基本上我想像旧版本的 RAD Studio 一样停用 Huge strings 指令,但我在 2010 版本中找不到。

4

1 回答 1

10

只需使用:

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

但请注意:

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

因此,您可能必须:

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

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

于 2012-04-20T05:10:29.833 回答