E2017列表需要的指针类型

时间:2015-07-23 08:17:48

标签: delphi delphi-xe7

从Win XP下的Delphi 2007到Win7下的Xe7,

我不确定为什么这个突出显示的行不起作用

Error : [dcc32 Error] utilmemblock.pas(935): E2017 Pointer type required

//D:Convert a memory block to a List. Odd sizes are truncated.
procedure MemBlockToList(const MemBlock:TMemBlock;List:TList);
var
  Size:Integer;
begin
  Size:=(MemBlock.Size div SizeOf(Pointer));
  List.Count:=Size;
  Move(MemBlock.Block^,List.Last^,Size*SizeOf(Pointer)); // This error points to this line
end;

我已经检查了这个related question,但我无法解决如何将其应用到我的问题中。

1 个答案:

答案 0 :(得分:6)

假设陈述

  • 我假设MemBlock是您可以控制的类型,因此不是错误的来源。
  • 我假设List.Last实际上是List.List

根据这些假设回答

在较旧的Delphi版本中,TList.List是指向静态数组的指针。在现代Delphi中,TList.List已被更改为类型为TPointerList的动态数组

TPointerList = array of Pointer;

所以你的代码应该是

Move(MemBlock.Block^, Pointer(List.List)^, Size*SizeOf(Pointer));