[fpc-pascal] Array as result in function.

silvioprog silvioprog at gmail.com
Thu Jan 19 23:06:53 CET 2017


On Thu, Jan 19, 2017 at 6:50 PM, fredvs <fiens at hotmail.com> wrote:

> Hello.
>
> With this code, the result of the function does not have same format as the
> array input:
>
> Why ?
>
> type
>   TArFloat = array of cfloat;
>
> function array_in_out(arrayin: TArFloat): TArFloat;
> begin
> result := arrayin;
> end;
>

It works fine here. Eg:

=== begin code ===

type
  TArFloat = array of cfloat;

function array_in_out(arrayin: TArFloat): TArFloat;
var
  i: byte;
begin
  for i := low(arrayin) to high(arrayin) do
    arrayin[i] *= 10;
  Result := arrayin;
end;

...

var
  item: cfloat;
  thebuffer: TArFloat;
begin
  SetLength(thebuffer, 3);
  thebuffer[0] := 1;
  thebuffer[1] := 2;
  thebuffer[2] := 3;
  WriteLn('before');
  for item in thebuffer do
    WriteLn(item.ToString);
  thebuffer := array_in_out(thebuffer);
  WriteLn('after x10');
  for item in thebuffer do
    WriteLn(item.ToString);
end;

// output:

before
1
2
3
after x10
10
20
30

=== end code ===


> Some more explaination.
>
> If in a code I use:
> var
> thebuffer: TArFloat;
>
> // thebuffer was filled with some float-samples
>
> thebuffer := array_in_out(thebuffer);
>
> It is not neutral, the data are affected (in audio the data are noisy).
>
> What is wrong ?
>

Are you using that function as callback with some (C/C++) library? If so,
check its parameter calling convention, declaring it as `function
array_in_out(arrayin: TArFloat): TArFloat; cdecl;`.


> Thanks.
>
> Fre;D


-- 
Silvio Clécio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20170119/b8cb2872/attachment.html>


More information about the fpc-pascal mailing list