繁体   English   中英

如何解决Delphi错误:不兼容的类型:“ PWideChar”和“ 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中正常工作?

谢谢

是否编译取决于类型检查的指针选项的设置 您显然已启用该选项,这是一个极好的决定。 这样做会导致更严格的类型检查。

禁用类型检查的指针后,您的代码就会编译。 启用类型检查的指针后,您的代码将无法编译,这是您想要的,因为您的代码无效。

现在,讨论有问题的类型。 它们在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不兼容,后者是PWideChar的别名,即^WideChar

通过将PC的类型更改为^BytePByte来修复代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM