无法指定左侧 - 布尔值(RecBuf [0]):= false

时间:2014-10-07 13:31:37

标签: delphi

我将旧代码从Delphi 5转换为XE5。 它有这段代码:

Boolean(RecBuf[0]) := False;

RecBuf是PChar。 这适用于Delphi 7,但不适用于XE5。 在XE5中,它给出了#34;左侧不能指定"错误。 如何在XE5中实现此代码?

3 个答案:

答案 0 :(得分:13)

在Delphi 7中,PCharPAnsiChar的别名。也就是说,指向8位ANSI字符。这意味着RecBuf[0]的类型为AnsiChar。由于AnsiCharBoolean具有相同的尺寸,因此投射有效。

在Delphi XE5中,PCharPWideChar的别名,指向16位宽的字符。因此RecBuf[0]的类型为WideChar。因此,演员表无效,因为WideCharBoolean的大小不同。

无法从您在此处显示的代码中辨别出如何最好地解决问题。您很可能需要重新声明RecBuf。也许它需要声明为PAnsiChar。虽然有人想知道为什么要将角色投射到Boolean

另一种可能性是RecBuf被声明为PChar的原因是允许你使用索引运算符[],这在旧版本的Delphi中是一种特殊的指针功能到字符类型。在现代Delphi中,您可以使用{$POINTERMATH ON}为所有类型指针启用该功能。所以,如果你这样做,那么RecBuf可能应该是PBoolean

最重要的是,虽然我们可以解释为什么编译器会抱怨您的代码,但我们无法为您提供明确的解决方案。

答案 1 :(得分:-1)

从RecBuf名称判断,它们不是用作指向字符串的指针,而是用作指向内存中分配的缓冲区的指针。

如果我的假设正确,您可能希望将RecBuf重新声明为PByte类型的变量。

答案 2 :(得分:-1)

你不能在左边分配施法材料,你需要施放右侧。

而不是

Newtype(Whatever) := NewtypeConstant;

你应该使用

Whatever := TUnknown(constant)

在你的案例中,recbuf是一个say,byte的数组,然后在其中放入false(0),所以它应该是

Recbuf[0] := Byte(False);

或者,你知道,你可以把零放在那里。