6

我需要能够将裸指针转换为变体。我知道指针指向一个变体,但我似乎无法将其取回。直接演员(我几乎认为)失败了:

Result := Variant(FAddress)^

返回编译器错误:[DCC Error] E2089 Invalid typecast

我也搜索了 variables.pas 单元,但没有任何反应。

显然我错过了一些东西。这样做的方法是什么?

4

1 回答 1

16

如果指针指向 Variant,则其类型为 PVariant。将其类型转换为该类型,然后取消引用:

Result := PVariant(FAddress)^;

更好的是,FAddress以正确的类型开始声明,然后您不需要进行类型转换:

var
  FAddress: PVariant;

Result := FAddress^;

编译器认为您尝试的类型转换无效,因为 Variant 是比 Pointer 更大的类型。编译器不知道从哪里获取附加数据以创建完整的 Variant 值。如果类型转换有效,则无论如何都不允许在 Variants 上使用运算^符。你可能已经摆脱了这个:

Result := Variant(FAddress^);

我从来不喜欢那个;如果 FAddress 是一个无类型指针,那么取消引用它会产生一个根本没有任何大小或类型的值,并且对这样的事情进行类型转换只是很奇怪。

于 2011-04-13T18:41:17.347 回答