Low level code

Top  Previous  Next

What is not translated > Low level code

It is not possible to convert code automatically, that uses low level tricky pointer manipulation, which in addition may rely on the memory layout of the intrinsic Delphi types as in the following example:



procedure SetTBytesLength(var b : TBytes; len : integer);


  PDynArrayRec = ^TDynArrayRec;

  TDynArrayRec = packed record

    RefCnt: LongInt;

    Length: NativeInt;



  p : Pointer;

  oldL, minL : NativeInt;


  if len = 0 then begin

    b := nil


  else begin

    p := Pointer(b);

    oldL := 0;

    if p <> nil then begin

      dec(PByte(p), SizeOf(TDynArrayRec));

      oldL := PDynArrayRec(p).Length



    if (p = nil) or (PDynArrayRec(p).RefCnt = 1) then begin

      ReallocMem(p, SizeOf(TDynArrayRec) + len)


    else begin



For other compilers then C++Builder Delphi2Cpp uses a std::vector as substitute for a dynamic array.std::vector has no RefCnt ond no Length element. The translation of the example case is fortunately easy because an existing method can be used.


void SetTBytesLength(TBytes& B, int Len)







This page belongs to the Delphi2Cpp Documentation

Delphi2Cpp home  Content