E2017指针类型需要使用Delphi 7方式的移动功能

时间:2013-07-21 09:10:27

标签: delphi pointers delphi-xe4

我正在尝试将项目从Delphi 7移植到新的Delphi XE4,我遇到了移动功能的问题:

{Create a temp record buffer}
HoldRec := AllocMem(RecordSize);
{Fill the temp record buffer with the current record}
move(ActiveBuffer^, HoldRec^, RecordSize); //Here the E2017 Error

编译器抛出:[dcc32 Error] E2017 Pointer type required,到达移动语句时出错......

为什么?在Delphi 7中它编译没有任何问题,为什么Delphi XE4不编译?

声明部分如下:

FBuffers: TBufList;
HoldRec : PChar;
FActiveRecord :integer;


function TDataSet.ActiveBuffer: TRecBuf;
begin
  Result := FBuffers[FActiveRecord];
end;

1 个答案:

答案 0 :(得分:2)

在Delphi 7中,TRecBuf是某种类型的指针,我不确定究竟是什么。在XE4中,它被声明为NativeInt。您需要将其强制转换为使代码编译的指针。

move(Pointer(ActiveBuffer)^, HoldRec^, RecordSize); 

我还要指出HoldRec现在是Unicode XE4中的PWideChar,但它是Delphi 7中的PAnsiChar。我怀疑你需要以这种或那种方式处理。很可能你需要将声明改为PAnsiChar,但我不能肯定地说这里。