E2017列表需要的指针类型

use*_*825 1 delphi delphi-xe7

从Win XP下的Winphi 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;
Run Code Online (Sandbox Code Playgroud)

我已经检查了这个相关的问题,但我无法弄清楚如何将它应用于我的问题.

Dav*_*nan 6

假设陈述

  • 我假设这MemBlock是一个你可以控制的类型,因此不是错误的来源.
  • 我假设List.Last实际读取List.List.

根据这些假设回答

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

TPointerList = array of Pointer;
Run Code Online (Sandbox Code Playgroud)

所以你的代码应该阅读

Move(MemBlock.Block^, Pointer(List.List)^, Size*SizeOf(Pointer));
Run Code Online (Sandbox Code Playgroud)