array of const for C++Builder

Top  Previous  Next

What is translated > Types > Arrays > Array parameters > array of const > array of const for C++Builder

 

For C++Builder the value of an array of const is represented by two values: a pointer to a TVarRec and the index of the last element of the array, which begins at the position which the pointer points to.

 

 

procedure foo(Args : array of const);

 

->

 

void __fastcall foo (  TVarRec* Args, const int Args_Size );

 

 

When such a functions is called with a set as argument, the macro ARRAYOFCONST is used into the C++ output.

 

foo(['hello', 'world']);   ->  foo (  ARRAYOFCONST(( "hello", "world" )) );

 

This macro is defined for the C++Builder  as:

 

#define ARRAYOFCONST(values) 

OpenArray<TVarRec>values, 

OpenArrayCount<TVarRec>values.GetHigh()

 

 

The class OpenArray<TVarRec> is constructed in a manner, that it's address is equal to the pointer TVarRec* used in the signature of foo above.

 

There is a small difference between Delphi and C++Builder concerning character pointers  like 'abc'. In Delphi 'abc' is stored as VUnicodeString, at C++Builder the TVarRec constructor for character pointers is used and therefore the value is stored as VPWideChar.

 

 

 

    procedure foo(const constArray : Array of const)

 

    case constArray[i].VType of

      vtPChar:      pac := constArray[i].VPChar;

      vtPWideChar:  pwc := constArray[i].VPWideChar;

      vtAnsiString: sa := AnsiString(constArray[i].VAnsiString);

      vtWideString: sw := WideString(constArray[i].VWideString);

      vtUnicodeString: su := UnicodeString(constArray[i].VUnicodeString);

    end;

    // Delphi: foo8['abc') => su = 'abc';

    // C++Builder: foo8['abc') => pwc = 'abc';

 

 

 

 



This page belongs to the DelphiXE2Cpp11 Documentation

DelphiXE2Cpp11 home  Content