我需要能够将裸指针转换为变量。我知道指针指向一个变体,但我似乎无法将其撤回。笔直的转换(正如我几乎认为的那样)失败了:
Result := Variant(FAddress)^
返回编译器错误:[DCC错误] E2089无效的类型转换
我也已经搜索了variants.pas单元,但没有任何提示。
显然我缺少了一些东西。有什么办法做到这一点?
最佳答案
如果指针指向Variant,则其类型为PVariant。将其输入类型,然后取消引用:
Result := PVariant(FAddress)^;
更好的是,以正确的类型声明
FAddress
开头,然后您无需进行类型转换:var
FAddress: PVariant;
Result := FAddress^;
编译器认为您尝试的类型转换无效,因为Variant类型大于Pointer类型。编译器不知道从何处获取附加数据以创建完整的Variant值。而且,如果类型转换有效,则无论如何都不允许在Variants上使用
^
运算符。您可能已经摆脱了这一点:Result := Variant(FAddress^);
我从来没有喜欢过如果FAddress是一个无类型的指针,则对其取消引用会产生一个完全没有任何大小或类型的值,并且将这种事情类型转换为怪异的。