2012-04-20 35 views
5

我是Delphi的新手,我正在将一个非常古老的Delphi项目移植到Embarcadero RAD Studio 2010中。我发现了一个使用字符串的问题。下面是代码:在Delphi 2010中关闭巨大的字符串

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

FileOfProgramaResultadosType = file of ProgramaResultadosType; 

和错误...

“E2155类型 '%s' 的需要初始化 - 在文件类型中不允许”

我知道这是一个当你没有指定字符串大小时,很多delphi开发人员都知道这个错误。

基本上我想停用巨大的字符串指令像老版本的RAD Studio,但我无法找到2010年的版本。

+2

您是否尝试使用embarcadero建议[E2155:类型'%s'需要完成 - 不允许在文件类型(Delphi)](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2 /EN/html/devcommon/cm_finit_in_file_xml.html)并使用一个char数组来代替? – RRUZ 2012-04-20 02:05:16

+0

因为字符串类型变成了Unicode,所以D2010不能“停用”巨大的字符串。 Unicode支持深度嵌入,因此它不能切换回任何旧的ANSI字符串类型。 您应该开始删除所有“文件”类型。他们真的过时了。 – 2012-04-20 09:54:50

回答

10

只需使用来代替:

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

但要注意的是:

  • 几乎到RTL功能,每一个电话将首先一个无形转化为新的string型:你应该更好地使用其他显式为string变量刚刚阅读shortstring内容;
  • 在较新版本的Delphi(从Delphi 2009开始)中,string是一个Unicode字符串:因此,在写入的shortstring(这是一个Ansi字符串)时可能会丢失一些数据;
  • 如果您的应用程序非常陈旧(Delphi 4,AFAIR的默认对齐方式发生变化),可能需要添加ProgramaResultadosType = packed record

所以你可能要:

  • 阅读使用类似上述结构的现有内容;
  • 使用新的范例编写,Unicode就绪(例如嵌入式数据库,如Midas,SQLite3或任何其他)。
现有的应用程序转换成较新的版本的Unicode的Delphi时

值得一读:

+0

@David你怎么知道我有一颗松动的牙齿?感谢编辑 - 我总是犯这个错误,不知道它...:) – 2012-04-20 09:29:15

+0

有一个助记符:选择有2个“o”,你可以*选择*,但失去只有1,因为如果你*失去* 1,你只剩下1个。 – 2012-04-20 18:23:01