【发布时间】:2020-05-22 07:58:40
【问题描述】:
以下代码产生EVariantInvalidOpError 异常:
var
i : Variant;
begin
i := 10;
ShowMessage(i.ToString());
end;
以下所有方法都很好,但我不明白为什么ToString 函数会引发Variant 类型变量的异常:
var
i : Variant;
begin
i := 10;
ShowMessage(VarToStr(i));
end;
var
i : Integer;
begin
i := 10;
ShowMessage(i.ToString());
end;
【问题讨论】:
-
您可能会注意到
i.ToString,当i是一个变体时,它的效果与i.SendToVoldemort一样糟糕。这只是一种不存在的方法。您正在考虑TIntegerHelper.ToString(比如说),但您的i不是整数,它是一个变体。 (事实上,在编译时甚至不知道变体是否包含整数!) -
@AndreasRejbrand:嗯,所以下一个问题是:为什么 Delphi 允许我使用
ToString函数,即使没有帮助程序为Variant类型实现这样的函数? -
因为变体很特殊。它是关于后期绑定、调度接口和类似的东西。我不知道细节,所以我会让更有知识的人回答。
-
一个变体可以包含一个
IDispatch,它使用后期绑定。
标签: delphi tostring delphi-xe7 variant