[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.
>
>
> ----------
>
PS
In fact this page of doc linked by Vojtěch may need reviewing:
docs-html:
"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, "
Huh?
vtWideString : (VWideString: Pointer);
vtInt64 : (VInt64: PInt64);
vtQWord : (VQWord: PQWord);
end;
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