我正在尝试将项目从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;
答案 0 :(得分:2)
在Delphi 7中,TRecBuf是某种类型的指针,我不确定究竟是什么。在XE4中,它被声明为NativeInt。您需要将其强制转换为使代码编译的指针。
move(Pointer(ActiveBuffer)^, HoldRec^, RecordSize);
我还要指出HoldRec现在是Unicode XE4中的PWideChar,但它是Delphi 7中的PAnsiChar。我怀疑你需要以这种或那种方式处理。很可能你需要将声明改为PAnsiChar,但我不能肯定地说这里。