【问题标题】:E2017 Pointer type required for ListE2017 列表所需的指针类型
【发布时间】:2015-07-23 08:17:48
【问题描述】:

从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,但我不知道如何将它应用于我的问题。

【问题讨论】:

  • 请试试这个Move(Pointer(MemBlock.Block)^, List.Last^,Size*SizeOf(Pointer));
  • @user 您已经提出了 79 个问题,但只投了 4 次。我是否可以恭敬地建议您考虑更充分地参与我们的社区。​​span>

标签: delphi delphi-xe7


【解决方案1】:

假设陈述

  • 我假设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));

【讨论】:

  • 将旧项目转换为 DXE5 时所需的 E2017 指针类型的一种解决方案涉及只需按照在线文档的建议省略取消引用运算符 ^。
猜你喜欢
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2011-09-14
相关资源
最近更新 更多