I am trying the compile the HtmlViewer component for Delphi 7 (https://github.com/BerndGabriel/HtmlViewer). Opened the project Frameviewer7.dpk under package subdir
However I am getting the following compilation errors: HtmlBuffer.pas(1611): Array Type required.
Which corresponds to the following code:
if FStart.BytePtr[0] = 0
And FStart is defined as FStart: TBuffPointer;
TBuffPointer = record
case Integer of
0: (BytePtr: PByte;);
1: (WordPtr: PWord;);
2: (AnsiChr: PAnsiChar;);
3: (WideChr: PWideChar;);
end;
Not sure what is wrong here. My compiler is Delphi7
FStart.BytePtr[0]
indicates that FStart.BytePtr
is an array, and the value of this expression is the first (0th) element in this array.
However, FStart.BytePtr
is actually a pointer. But often you can use arrays and pointers to achieve the same task -- either you use an array of TSomeType
, or you use a pointer to the first element in an in-memory list of TSomeType
items.
I assume this is what is going on here. Hence, you want to get the first item of a list of byte
values, the first occurring at address FStart.BytePtr
. To obtain the byte
at this location, you dereference the pointer using ^
: FStart.BytePtr^
.
The code you have found tries to access data using array notation on a pointer. This syntactic sugar might work in some newer version or Delphi, or using some compiler option. (I don't recall.)