【问题标题】:Deactivate Huge Strings in Delphi 2010在 Delphi 2010 中停用巨大的字符串
【发布时间】:2012-04-20 02:00:36
【问题描述】:

我是 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 版本中找不到。

【问题讨论】:

  • 您是否尝试使用 embarcadero 建议 E2155: Type '%s' needs finalization - not allowed in file type (Delphi) 并改用 char 数组?
  • D2010 不能再“停用”巨大的字符串,因为字符串类型变成了 Unicode。 Unicode 支持被深深嵌入,因此它不能切换回任何旧的 ANSI 字符串类型。您应该开始删除所有“文件”类型。它们真的已经过时了。

标签: string delphi delphi-2010


【解决方案1】:

改用:

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

但请注意:

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

所以你可能必须:

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

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

【讨论】:

  • @David 你怎么知道我的牙齿松动了?感谢您的编辑 - 我总是在不知情的情况下犯这个错误...... :)
  • 有一个助记符:choose 有 2 个“o”,你可以从中 choose,但 lost 只有 1 个,因为如果你 lose 1 你只剩 1 个了。
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 2023-03-25
  • 1970-01-01
  • 2022-11-18
  • 2011-08-31
  • 2021-10-26
  • 2011-01-26
  • 1970-01-01
相关资源
最近更新 更多