我需要能够将裸指针转换为变体。我知道指针指向一个变量,但我似乎无法把它取出来。直接转换(正如我所认为的)失败了:
Result := Variant(FAddress)^
返回编译错误:[DCC error] E2089 Invalid typecast
我已经搜索了所有的变体。我的单位也一样,但是什么也没有。
显然我错过了什么。怎么做呢?
如果指针指向一个变量,那么它的类型是PVariant。对其进行类型转换,然后解引用:
Result := PVariant(FAddress)^;
更好的是,用正确的类型开始声明FAddress
,然后您不需要类型转换:
var
FAddress: PVariant;
Result := FAddress^;
编译器认为您尝试的类型强制转换无效,因为Variant的类型大于Pointer的类型。编译器不知道从哪里获得额外的数据来创建一个完整的Variant值。如果类型转换有效,则无论如何都不允许在变体上使用^
操作符。你可能已经逃脱了这个:
Result := Variant(FAddress^);
我从来都不喜欢;如果FAddress是一个无类型的指针,那么对它解引用将产生一个没有任何大小或类型的值,并且对这种事情进行类型强制转换是很奇怪的。