gpt4 book ai didi

delphi - 如何解决Delphi错误: Incompatible types: 'PWideChar' and 'Pointer'

转载 作者:行者123 更新时间:2023-12-02 15:03:28 25 4
gpt4 key购买 nike

我有一段来自 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 不兼容这是 PWideChar 的别名,即^WideChar .

通过更改 PC 的类型来修复您的代码至^BytePByte .

关于delphi - 如何解决Delphi错误: Incompatible types: 'PWideChar' and 'Pointer' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com