[fpc-pascal] Problem with array of const

pascalX at piments.com pascalX at piments.com
Sun Oct 29 04:33:39 CET 2017

On 29/10/17 00:31, Vojtěch Čihák wrote:
> Looking to docs: https://www.freepascal.org/docs-html/ref/refsu69.html
> I tried writeln(AnsiString(args[0].VAnsiString));
> or just writeln(String(args[0].VAnsiString));
> which works.
> V.
> ______________________________________________________________
>  > Od: Darius Blaszyk <dhkblaszyk at zeelandnet.nl>
>  > Komu: FPC-Pascal users discussions <fpc-pascal at lists.freepascal.org>
>  > Datum: 29.10.2017 00:59
>  > Předmět: [fpc-pascal] Problem with array of const
>  >
> Consider the application below. When I run it I do get the following output:
> name
> rg��������name�F&{00000000-0000-0000-C000-000000000046}
> In other words I lose the first character (a) from the arguments 
> supplied and the string returns with a lot of garbage. What am I doing 
> wrong here?
> Rgds, Darius
> program test_args;
> procedure test(name: string; args: array of const);
> begin
>    writeln(name);
>    writeln(args[0].VString^);
> end;
> begin
>    test('name', ['arg']);
> end.
> ----------


In fact this page of doc linked by Vojtěch may need reviewing:


"Remark that this is not true for Delphi, so code relying on this 
feature will not be portable."

What is not "true"?  It is unclear exactly what "this" refers to. Should 
this be stating that cdecl modifier is not supported in Delphi?

"Remark: Note that there is no support for QWord arguments in array of 
const. This is for Delphi compatibility, "


        vtWideString : (VWideString: Pointer);
        vtInt64      : (VInt64: PInt64);
        vtQWord      : (VQWord: PQWord);

Also all the code examples are displayed using the wrong quote character 
and copying the code results in tons of syntax errors.  If this was done 
to make mark-up easier it should at least be noted in the About this 
Guide, Notations section.  Preferably the code should paste and work.

the testit example requires a mode but this is not included as is 
promised in  About this Guide.
{$mode objfpc}

Further typos suggest is was never tested:

         Writeln (’AnsiString, value :’,AnsiString(Args[I].VAnsiString);

missing parenthesis at end of line.

        Writeln (’No aguments’);

aguments ??

       Therefor, inside the procedure body,

Should be "Therefore". Therefor is a different word.

More information about the fpc-pascal mailing list