在Delphi匿名方法中不可能使用var参数吗?

在Delphi匿名方法中不可能使用var参数吗?,delphi,parameters,var,delphi-2009,anonymous-methods,Delphi,Parameters,Var,Delphi 2009,Anonymous Methods,在匿名方法中不能使用var参数吗?以下示例说明了我面临的问题: program Project2; {$APPTYPE CONSOLE} type TTextTransformProc = reference to procedure(var AText: string); procedure WriteTransformedText(const AText: string; AProc: TTextTransformProc); var S: string; begin S

在匿名方法中不能使用var参数吗?以下示例说明了我面临的问题:

program Project2;

{$APPTYPE CONSOLE}

type
  TTextTransformProc = reference to procedure(var AText: string);

procedure WriteTransformedText(const AText: string; AProc: TTextTransformProc);
var
  S: string;
begin
  S := AText;
  AProc(S);
  Writeln(S);
end;

procedure UpperCaseProc(var AText: string);
var
  i: integer;
begin
  for i := 1 to Length(AText) do
    AText[i] := UpCase(AText[i]);
end;

begin
  WriteTransformedText('This is a test.', UpperCaseProc);
  Readln;
end.

代码可以编译,但运行时会出现访问冲突错误,并且没有大写字符串。如果删除对的引用,代码将按预期工作。

这是编译器的缺陷。你的代码是正确的。编译器是错误的。在你能得到一个更现代的编译器之前,你必须找到一个解决方法

可能是Delphi 2009的bug。这段代码和XE2一样工作正常。已经在Delphi 2010中工作了。谢谢您的回答。在我的特殊情况下,最好的解决方法是使用返回字符串的函数。这可能是更好的设计,因为它更易于组合