为variant参数赋值

时间:2011-05-02 00:39:21

标签: delphi pass-by-reference parameter-passing delphi-xe

我在Delphi XE中得到了这样的代码

function DoSomething(MyVar : Variant) : boolean;
begin
  MyVar := 'Bar';
  Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  foo : string;
begin
  foo := '';
  showmessage(foo); // shows blank ofc
  DoSomething(foo);
  showmessage(foo); // still blank
end;

我正在尝试做的事情,这样就可以设置foo的参数。我尝试使用var关键字,如

DoSomething(var MyVar : Variant)....

但不会编译。

原因是,DoSomething可以为MyVar分配一个字符串或整数,这就是为什么它是一个变种......

1 个答案:

答案 0 :(得分:3)

当我这样做时

function Foo(var Bar: variant): boolean;
begin
  Bar := 'beta';
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  a: variant;
begin
  a := 'alpha';
  Foo(a);
  caption := a;
end;

表单的标题为beta。所以它为我编译......

您尝试将string作为var variant参数发送。您需要发送variant作为var variant参数,就像编译器所说的那样([DCC Error] Unit1.pas(35): E2033 Types of actual and formal var parameters must be identical)!

但是变体通常不是最好的工作方式(次优性能,一件事)。

你可以做一些简单的事情,比如

type
  TValType = (vtString, vtInteger);
  TData = record
    ValType: TValType;
    ValStr: string;
    ValInt: integer;
  end;

并做

function Foo(var Data: TData): boolean;