Thanks Colin

The TVarRec and open array stuff come from Rudy's page - very helpful too :)

D


> Haven't got into the details of your problem, but here is an article
> which goes into the details
> of array of const.
>
> http://rvelthuis.de/articles/articles-openarr.html
>
> Hope it helps,
>
> Cheers,
> Colin
>
> On 25 August 2011 09:40, David Moorhouse (DUG) <del...@moorhouse.net.nz>
> wrote:
>> I have the following code snippet
>>
>> <code>
>> type
>>  PConstArray = ^TConstArray;
>>  TConstArray = array of TVarRec;
>>
>> function CreateConstArray(const Elements: array of const): TConstArray;
>>
>> type
>>  TLogType = (ltError, ltWarn, ltInfo);
>>  PLogData = ^TLogData;
>>  TLogData = record
>>    LogType: TLogType;
>>    LogArgs: TConstArray;
>>  end;
>>
>> ....
>>
>> procedure TUserClass.Log(const LogType: TLogType; const Args: array of
>> const );
>> var
>>  LogData: PLogData;
>> begin
>>    // size of record TLogData does not work
>>    GetMem(LogData, sizeof(TLogData));
>>    LogData.LogType := LogType;
>> // blows up on next line
>>    LogData.LogArgs := CreateConstArray(Args);
>> //  ... do some other stuff with the LogData item finally calling
>> FreeMem
>> end;
>>
>> function CreateConstArray(const Elements: array of const): TConstArray;
>> var
>>  I: Integer;
>> begin
>>  SetLength(Result, Length(Elements));
>>  for I := Low(Elements) to High(Elements) do
>>    Result[I] :=  // assign a TVarRec here
>> end;
>> </code>
>>
>> The code that assigns the memory only assigns 8 bytes - and an access
>> violation ensues.  If I replace the call to "sizeof" with the number 16,
>> the code works fine.
>>
>> My understanding of dynamic arrays was that the compiler created a 4
>> byte
>> field before the first element that contained the length of the array.
>>
>> So why does the sizeof  function not reflect this ?  And why do I need
>> 16
>> bytes not 12  (4 for LogType + 4 for length of array + 4 for array
>> pointer)?
>> Also regardless of the number of items in the open array parameter, 16
>> bytes works, so it does not relate the length of the TConstArray.
>>
>> Your thoughts ?
>>
>> David
>>
>>
>>
>> _______________________________________________
>> NZ Borland Developers Group - Delphi mailing list
>> Post: delphi@delphi.org.nz
>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>> Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject:
>> unsubscribe
>>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi@delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject:
> unsubscribe
>



_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi@delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: 
unsubscribe

Reply via email to