使用Delphi 7方式中的移动函数需要E2017指针类型

使用Delphi 7方式中的移动函数需要E2017指针类型,delphi,pointers,delphi-xe4,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 Er

我正在尝试将一个项目从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指针类型required
,到达move语句时出错

为什么??在Delphi7中,它的编译没有任何问题,为什么DelphiXe4不编译

声明部分如下:

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


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

在Delphi7中,TRecBuf是某种类型的指针,我不确定具体是什么。在XE4中,它被声明为nativent。您需要将其转换为指针,以使代码能够编译

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

我还要指出,HoldRec现在在Unicode XE4中是PWideChar,但在Delphi7中是PAnsiChar。我想你需要以这样或那样的方式来处理这件事。很可能您需要将声明更改为PAnsiChar,但我不能从这里确定。

在Delphi 7中,TRecBuf是某种类型的指针,我不确定具体是什么。在XE4中,它被声明为nativent。您需要将其转换为指针,以使代码能够编译

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

我还要指出,HoldRec现在在Unicode XE4中是PWideChar,但在Delphi7中是PAnsiChar。我想你需要以这样或那样的方式来处理这件事。很可能您需要将声明更改为PAnsiChar,但我不能从这里确定。

我也面临同样的问题,并试图用您的解决方案来解决。我的行是“Move(MemBlock.Block^,List.List^,Size*SizeOf(指针));”。它看起来不像是可以工作的方式。它应该是什么样子?@user请不要在评论中提问。我们可能会猜测
List
TList
,因为它的
List
属性更改了类型。查看
TList
的源代码。解决它。这并不难。我也面临同样的问题,并试图用你的解决方案来解决。我的行是“Move(MemBlock.Block^,List.List^,Size*SizeOf(指针));”。它看起来不像是可以工作的方式。它应该是什么样子?@user请不要在评论中提问。我们可能会猜测
List
TList
,因为它的
List
属性更改了类型。查看
TList
的源代码。解决它。这并不难。