我需要能够将裸指针转换为变体。我知道指针指向一个变体,但我似乎无法将它取回。直接演员(我几乎认为)失败了:
Result := Variant(FAddress)^
返回编译器错误:[DCC错误] E2089无效的类型转换
我也在搜索variants.pas单元,但没有任何东西跳出来。
显然我错过了一些东西。这样做的方法是什么?
答案 0 :(得分:16)
如果指针指向Variant,则其类型为PVariant。键入它,然后取消引用:
Result := PVariant(FAddress)^;
更好的是,首先使用正确的类型声明FAddress
,然后您不需要进行类型转换:
var
FAddress: PVariant;
Result := FAddress^;
编译器认为您尝试的类型转换无效,因为Variant是比Pointer更大的类型。编译器不知道从何处获取其他数据以创建完整的Variant值。如果类型转换 有效,则无论如何都不允许在Variants上使用^
运算符。你可能已经离开了这个:
Result := Variant(FAddress^);
我从未喜欢过;如果FAddress是一个无类型的指针,那么解除引用它会产生一个没有任何大小或类型的值,而且输入这样的东西真是奇怪。