使用Delphi 7方式中的移动函数需要E2017指针类型
我正在尝试将一个项目从Delphi 7移植到新的Delphi XE4,但我遇到了移动函数的问题:使用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
{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
的源代码。解决它。这并不难。