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 <dhkblas...@zeelandnet.nl>
 > Komu: FPC-Pascal users discussions <fpc-pascal@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.





_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to