gpt4 book ai didi

delphi - 为什么 Format 拒绝以 XE4 开头的过程地址参数

转载 作者:行者123 更新时间:2023-12-03 15:00:53 28 4
gpt4 key购买 nike

考虑这个程序:

{$APPTYPE CONSOLE}

uses
System.SysUtils;

procedure Foo;
begin
end;

type
TProcedure = procedure;

const
FooConst: TProcedure = Foo;

var
FooVar: TProcedure = Foo;
P: Pointer;

{$TYPEDADDRESS ON}

begin
P := @Foo;
Writeln(Format('%p', [P]));
Writeln(Format('%p', [@FooConst]));
Writeln(Format('%p', [@FooVar]));
Writeln(Format('%p', [@Foo]));
Readln;
end.

该程序在 XE3 上编译并运行并产生以下输出:

00419FB800419FB800419FB800419FB8

On XE4 and later the program fails to compile, with error messages on both of these lines:

Writeln(Format('%p', [@FooConst]));
Writeln(Format('%p', [@FooVar]));
[dcc32 Error] E2250 There is no overloaded version of 'Format' that can be calledwith these arguments

在 XE4、XE5 和 XE6 上,程序在 $TYPEDADDRESS 关闭时编译。在 XE7 上,无论 $TYPEDADDRESS 设置如何,程序都无法编译。

这是编译器错误吗?或者我是否使用了不正确的语法来获取过程的地址?

最佳答案

我认为这是一个编译器错误,并已提交 QC 报告:QC#127814 .

作为解决方法,您可以使用以下任一方法:

  1. 使用 addr() 而不是 @ 运算符。
  2. @FooVar@FooConst 转换为 Pointer,例如指针(@FooVar)

关于delphi - 为什么 Format 拒绝以 XE4 开头的过程地址参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815970/

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