如何从Delphi中的指针获取变量?

时间:2011-04-13 18:39:11

标签: delphi pointers variant

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

Result := Variant(FAddress)^

返回编译器错误:[DCC错误] E2089无效的类型转换

我也在搜索variants.pas单元,但没有任何东西跳出来。

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

1 个答案:

答案 0 :(得分:16)

如果指针指向Variant,则其类型为PVariant。键入它,然后取消引用:

Result := PVariant(FAddress)^;

更好的是,首先使用正确的类型声明FAddress,然后您不需要进行类型转换:

var
  FAddress: PVariant;

Result := FAddress^;

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

Result := Variant(FAddress^);

我从未喜欢过;如果FAddress是一个无类型的指针,那么解除引用它会产生一个没有任何大小或类型的值,而且输入这样的东西真是奇怪。