我正在尝试编译 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/