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

Nic*_*ges 6 delphi pointers variant

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

Result := Variant(FAddress)^
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rob*_*edy 16

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

Result := PVariant(FAddress)^;
Run Code Online (Sandbox Code Playgroud)

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

var
  FAddress: PVariant;

Result := FAddress^;
Run Code Online (Sandbox Code Playgroud)

编译器认为您尝试的类型转换无效,因为Variant是比Pointer更大的类型.编译器不知道从何处获取其他数据以创建完整的Variant值.而且,如果类型转换有效的,使用的^操作是不允许的变体反正.你可能已经离开了这个:

Result := Variant(FAddress^);
Run Code Online (Sandbox Code Playgroud)

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