gpt4 book ai didi

delphi - OleVariant 变量的初始值

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

我一直认为 OleVariant 变量的初始值始终等于“未分配”(类型 VT_EMPTY)。但下面用 XE3 编译的简单代码告诉我事实并非如此。

{$APPTYPE CONSOLE}

uses
ActiveX;

function GetValue: OleVariant;
begin
Result := TVariantArg(Result).vt;
end;

function GetValue2: OleVariant;
begin
Result := 10;
Result := GetValue;
end;

var
Msg: string;
begin
Msg := GetValue2;
Writeln(Msg);
end.

应用程序写入“3”。正常吗?

最佳答案

对于不适合寄存器的类型,Delphi 函数的返回值将作为 var 参数传递。因此编译器将代码转换为如下所示:

procedure GetValue(var Result: OleVariant);

因此,进入函数时 Result 的值就是您为其分配返回值的变量的值。

所以你的调用代码被转换为

function GetValue2: OleVariant;
begin
Result := 10;
GetValue(Result);
end;

所以整个程序就变成了

{$APPTYPE CONSOLE}

uses
ActiveX;

procedure GetValue(var Result: OleVariant);
begin
Result := TVariantArg(Result).vt;
end;

procedure GetValue2(var Result: OleVariant);
begin
Result := 10;
GetValue(Result);
end;

var
tmp: OleVariant;
Msg: string;
begin
GetValue2(tmp);
Msg := tmp;
Writeln(Msg);
end.

这解释了 VT_I4 的输出。

当然,这都是实现细节的结果。您应该始终初始化函数返回值。

关于delphi - OleVariant 变量的初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161074/

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