<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">LacaK via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> schrieb am Di., 1. Dez. 2020, 11:00:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Dňa 30.11.2020 o 23:26 Sven Barth via fpc-pascal napísal(a):<br>
> Am 30.11.2020 um 13:20 schrieb LacaK via fpc-pascal:<br>
>> Hi,<br>
>><br>
>> is there a way how to initialize record member of pointer type (other <br>
>> than PChar) in the following example:<br>
>><br>
>> type<br>
>>   TMyRec=record<br>
>>     a: PByte; // if I change PByte to PAnsiChar then it works<br>
>>   end;<br>
>><br>
>> const<br>
>>   MyConst: TMyRec = (a: 'abcd'); // I want to a points to static <br>
>> memory where 'abcd' is stored<br>
>><br>
>> I would like to initialize a to be pointer to another known constant <br>
>> or directly to supplied string constant.<br>
>><br>
>> For example something like:<br>
>><br>
>> const<br>
>>   MyConst1='abcd';<br>
>>   MyConst2=TMyRec = (a: @MyConst1);<br>
><br>
> Untyped constants don't have an address you can take. You need to use <br>
> a typed constant:<br>
><br>
> === code begin ===<br>
><br>
> const<br>
>   MyConst1: Byte = 123;<br>
>   MyConst2: TMyRec = (a: @MyConst1);<br>
><br>
> === code end ===<br>
><br>
Thank you, yes it works. I have used:<br>
<br>
const<br>
   MyConst1: AnsiString = 'abc'<br>
   MyConst2: TMyRec = (a: @MyConst1[1]);<br>
<br>
unfortunately it seems, that I can not use Length(MyConst1) in:<br>
<br>
type<br>
   TMyRec=record<br>
     l: integer;<br>
     a: PByte;<br>
   end;<br>
<br>
const<br>
   MyConst1: AnsiString = 'abc';<br>
   MyConst2: TMyRec = (l: Length(MyConst1); a: @MyConst1[1]);<br>
<br>
Why is it prohibited?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Because MyConst1 is not an *untyped* constant. Only untyped constants can be used in constant expressions (a pointer to something can be considered an untyped constant). </div><div dir="auto"><br></div><div dir="auto">The following might work though I did not test it:</div><div dir="auto"><br></div><div dir="auto">=== code begin ===</div><div dir="auto"><br></div><div dir="auto">const</div><div dir="auto">   MyStr = 'abc' </div><div dir="auto">   MyConst1: AnsiString = MyStr;</div><div dir="auto">   MyConst2: TMyRec = (l: Length(MyStr); a: @MyConst1[1]);</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">=== code end ===</div><div dir="auto"><br></div><div dir="auto">Regards,</div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>