从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,但我无法解决如何将其应用到我的问题中。
答案 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));