用于shorttrings的Delphi编译器指令不起作用?

用于shorttrings的Delphi编译器指令不起作用?,第1张

概述我正在尝试将项目从Delphi 4移植到Delphi XE2.我要求在项目中使用shortstring.根据Delphi帮助,$H-应该使编译器使用字符串类型的短串.我已经使用了这个指令,但我没有看到任何区别.我写了一个小测试程序: program Stringtest;{$APPTYPE CONSOLE}{$R *.res}{$H- }uses System.SysUtils; 我正在尝试将项目从Delphi 4移植到Delphi XE2.我要求在项目中使用shortstring.根据Delphi帮助,$H-应该使编译器使用字符串类型的短串.我已经使用了这个指令,但我没有看到任何区别.我写了一个小测试程序:

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.

在我看来,str和short的输出应该是相同的,因为编译器应该将它们都视为短串.但str的大小为4,简称为256.有没有其他方法让编译器将字符串视为shorttring,或者是在源代码中用shortstring替换所有字符串出现的唯一解决方案?

解决方法 $H-是遗留的,仅用于向后兼容.没有办法强制Delphi XE2(或任何版本的Delphi编译器从D2009及更高版本)不使用Unicode作为默认字符串类型.

编译器指令仍然只是为了防止旧代码在编译时中断.当Delphi 2009以Unicode-only作为默认字符串类型发布时,有一点骚动,没有切换回恢复为AnsiString作为默认值.据解释,他们确定这几乎是不可能的,因为需要有两个不同版本的RTL,VCL等.允许ShortString成为默认值需要相同的东西.

您需要将所有字符串引用显式更改为shortstring(或者更好,修复代码以不需要它们).

总结

以上是内存溢出为你收集整理的用于shorttrings的Delphi编译器指令不起作用?全部内容,希望文章能够帮你解决用于shorttrings的Delphi编译器指令不起作用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存