gpt4 book ai didi

string - Delphi 短字符串编译器指令不起作用?

转载 作者:行者123 更新时间:2023-12-03 15:23:59 25 4
gpt4 key购买 nike

我正在尝试将项目从 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.

在我看来,strshort 的输出应该是相同的,因为编译器应该将两者视为 shortstring。但 str 的大小为 4,short 的大小为 256。是否有其他方法可以让编译器将 string 视为 shortstring 或者是将所有出现的 string 替换为 shortstring 的唯一解决方案 在源代码中?

最佳答案

$H- 是遗留的,仅为了向后兼容而提供。无法强制 Delphi XE2(或 D2009 及更高版本的任何 Delphi 编译器版本)不使用 Unicode 作为默认字符串类型。

编译器指令仍然存在,只是为了防止旧代码在编译时被破坏。当 Delphi 2009 发布时,仅使用 Unicode 作为默认字符串类型,而没有切换回使用 AnsiString 作为默认字符串类型,这引起了一些轩然大波。据解释,他们认为这实际上是不可能的,因为需要有两个不同版本的 RTL、VCL 等。允许 ShortString 成为默认值也需要同样的事情。

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

关于string - Delphi 短字符串编译器指令不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com