How to resolve Delphi error: Incompatible types: 'PWideChar' and 'Pointer'
How to resolve Delphi error: Incompatible types: 'PWideChar' and 'Pointer'
我有这段代码来自 Delphi 7:
var
lpRgnData: PRgnData;
PC: PChar;
PR: PRect;
...
PC := @(lpRgnData^.Buffer[0]);
在Delphi XE4 中出现以下编译错误:
Incompatible types: 'PWideChar' and 'Pointer'
应该如何更新此代码才能在 XE4 中正常工作?
谢谢
是否编译取决于 type-checked pointers option 的设置。您显然已经启用了该选项,这是一个很好的决定。这样做会导致更严格的类型检查。
在禁用类型检查指针的情况下,您的代码可以编译。启用类型检查指针后,您的代码无法编译,这正是您想要的,因为您的代码无效。
现在,我们来谈谈有问题的类型。它们在 Windows
单元中定义如下:
type
PRgnData = ^TRgnData;
{$EXTERNALSYM _RGNDATA}
_RGNDATA = record
rdh: TRgnDataHeader;
Buffer: array[0..0] of Byte;
Reserved: array[0..2] of Byte;
end;
TRgnData = _RGNDATA;
{$EXTERNALSYM RGNDATA}
RGNDATA = _RGNDATA;
使用类型检查指针的好处是编译器可以告诉您您正在做的事情是无效的。它知道 lpRgnData^.Buffer[0]
的类型为 Byte
,因此 @(lpRgnData^.Buffer[0])
的类型为 ^Byte
。它知道与 PChar
不兼容,PChar
是 PWideChar
的别名,即 ^WideChar
.
通过将 PC
的类型更改为 ^Byte
或 PByte
.
来修复您的代码
我有这段代码来自 Delphi 7:
var
lpRgnData: PRgnData;
PC: PChar;
PR: PRect;
...
PC := @(lpRgnData^.Buffer[0]);
在Delphi XE4 中出现以下编译错误:
Incompatible types: 'PWideChar' and 'Pointer'
应该如何更新此代码才能在 XE4 中正常工作?
谢谢
是否编译取决于 type-checked pointers option 的设置。您显然已经启用了该选项,这是一个很好的决定。这样做会导致更严格的类型检查。
在禁用类型检查指针的情况下,您的代码可以编译。启用类型检查指针后,您的代码无法编译,这正是您想要的,因为您的代码无效。
现在,我们来谈谈有问题的类型。它们在 Windows
单元中定义如下:
type
PRgnData = ^TRgnData;
{$EXTERNALSYM _RGNDATA}
_RGNDATA = record
rdh: TRgnDataHeader;
Buffer: array[0..0] of Byte;
Reserved: array[0..2] of Byte;
end;
TRgnData = _RGNDATA;
{$EXTERNALSYM RGNDATA}
RGNDATA = _RGNDATA;
使用类型检查指针的好处是编译器可以告诉您您正在做的事情是无效的。它知道 lpRgnData^.Buffer[0]
的类型为 Byte
,因此 @(lpRgnData^.Buffer[0])
的类型为 ^Byte
。它知道与 PChar
不兼容,PChar
是 PWideChar
的别名,即 ^WideChar
.
通过将 PC
的类型更改为 ^Byte
或 PByte
.