[Lazarus] Passing a section of an array to a function.
pascaldragon at googlemail.com
Mon Sep 10 10:14:06 CEST 2012
Am 10.09.2012 08:36, schrieb Dave Coventry:
> I have an array of Byte which I have loaded from a file.
> I want to process a 100 byte section of the array which starts at
> offset 32 in my array.
> My function (or procedure) is as follows:
> procedure decompress_r(cbuf: array of byte);
> len,i: integer;
> if (cbufand $F0)=$20 then
> len:=cbuf[i]and $7;
> I call my procedure by
Did you really write "&"? The address operator is "@", but this won't
make your code work anyway. If you did indeed write "&" (which is for
escaping keywords) you do indeed only pass the 32nd element to your
> It seems to work. the first element in the array is 0x20, but the rest
> of the array is garbage.
> The array sent is:
> The array received is
> Can anyone tell me the correct way to pass the portion of the array to
> the function?
Dynamic arrays are internally pointers to an array (more or less). So if
you would use "@buf" you would be passing the address of one element
to a function that takes an array. If you know the amount of bytes you
want to copy then you should use "Copy(buf, 32, count)" as argument for
decompress_r or if you don't know the amount you should change your
function from "array of Byte" to "PByte" and pass the address of the
32nd byte using "@buf". The remaining part of the function can stay
More information about the Lazarus