Mar*_*ria 4 delphi string compiler-directives delphi-xe2
我正在尝试将项目从Delphi 4移植到Delphi XE2.我有要求shortstring在项目中使用.根据Delphi帮助,$ H-应该使编译器使用string类型的短串.我已经使用了这个指令,但我没有看到任何区别.我写了一个小测试程序:
program Stringtest;
{$APPTYPE CONSOLE}
{$R *.res}
{$H- }
uses
System.SysUtils;
var
str : string;
short : shortstring;
begin
try
str := 'testing';
short := 'testing';
Writeln('str ' +Format('%d', [sizeOf(str)]) );
Writeln('short ' +Format('%d', [sizeOf(short)]) );
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Run Code Online (Sandbox Code Playgroud)
在我看来,两者的输出应该是相同的str,short因为编译器应该将两者都视为一个shortstring.但是大小是4 for str和256 short.是否有任何其他的方式可以让编译器治疗string的shortstring或者是更换的所有出现的唯一解决方案 string与shortstring源代码?
$ H-是遗留的,仅用于向后兼容.没有办法强制Delphi XE2(或任何版本的Delphi编译器从D2009及更高版本)不使用Unicode作为默认字符串类型.
编译器指令仍然只是为了防止旧代码在编译时中断.当Delphi 2009以Unicode-only作为默认字符串类型发布时,有一点骚动,没有切换回恢复为AnsiString作为默认值.据解释,他们确定这几乎是不可能的,因为需要有两个不同版本的RTL,VCL等.允许ShortString成为默认值需要相同的东西.
您需要将所有字符串引用显式更改为shortstring(或者更好,修复代码以不需要它们).