delphi - 为 Delphi 7 编译 HtmlViewer 组件时出错

标签 delphi delphi-7

我正在尝试编译 Delphi 7 的 HtmlViewer 组件( https://github.com/BerndGabriel/HtmlViewer )。打开包子目录下的项目Frameviewer7.dpk

但是我收到以下编译错误: HtmlBuffer.pas(1611):需要数组类型。

对应以下代码:

 if FStart.BytePtr[0] = 0 

FStart 定义为 FStart: TBuffPointer;

TBuffPointer = record
    case Integer of
      0: (BytePtr: PByte;);
      1: (WordPtr: PWord;);
      2: (AnsiChr: PAnsiChar;);
      3: (WideChr: PWideChar;);
    end;

不知道这里出了什么问题。我的编译器是Delphi7

最佳答案

FStart.BytePtr[0] 表示FStart.BytePtr是一个数组,该表达式的值为第一个(第0 ) 该数组中的元素。

但是,FStart.BytePtr 实际上是一个指针。但通常您可以使用数组和指针来完成相同的任务 - 要么使用 TSomeType 数组,要么使用指向 TSomeType 内存列表中第一个元素的指针 项目。

我想这就是这里发生的事情。因此,您想要获取 byte 值列表的第一项,第一项出现在地址 FStart.BytePtr 处。要获取此位置的字节,请使用^取消引用指针:FStart.BytePtr^

您找到的代码尝试使用指针上的数组表示法来访问数据。这个语法糖可能在一些较新的版本或 Delphi 中工作,或者使用一些编译器选项。 (我不记得了。)

关于delphi - 为 Delphi 7 编译 HtmlViewer 组件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001905/

相关文章:

delphi - 传递列表的预期方式是什么?

wpf - 如何获取打开的窗口列表,包括 Delphi 应用程序中的 DLL

delphi - 如何在 Delphi 中获取焦点/选定的对象?

xml - 使用 Delphi7 TClientDataSet : is it possible to have it save its XML contents in an indented format?

sql-server - 区域日期格式和数据库日期格式的不同日期格式的 SQL Server 错误

delphi - 从 Delphi DLL 传递 PChar

delphi - 串口在delphi中不起作用

.net - 为什么VCL/RTL中有这么多$IF DEFINED(CLR)?

delphi - Delphi XE6可以为Windows Phone编译吗?

delphi - 如何获取页面控件上的元素?