On Sun, 8 Jul 2018 17:16:01 +0200, Martin <f...@mfriebe.de> wrote: >On 08/07/2018 17:07, Bo Berglund wrote: >> Say I have a record type defined like this: >> >> TAppData = packed record //Total 8 bytes per app >> ActiveToken: word; //Matches constant for app if active >> Option: word; //16 option bits >> ExpDate: word; //Integer TDateTime values >> Info: word; //16 info bits >> end; >> >> The data is stored in a security dongle memory which can be accessed >> only a word at a time by its word address 0..55. >> >> I want to write my code such that the address to the individual member >> is calculated automatically so if the record type is modified it will >> still work. >> > >var AppData: TAppData absolute 0; >begin >writeln( ptrint( @AppData.Option )); > >You can also take a variable without "absolute" >@AppData.Option - @AppData
I tried this: var offs: word; begin ... offs := @FAppData.Info - @FAppData; //Info is 4th member of record address := AppBase + (AppNumber -1) * (SizeOf(TAppData) div 2) + offs; But it was not accepted by the compiler (on the offs := line)... Error: Operator not applicable to this operand type FAppData is declared in the class definition like this: TDongle = class private { Private declarations } FAppNumber, FKeySerial, FKeyFound: boolean; FAppData: TAppData; .... I don't know the command 'absolute' and how it can be applied here in a class definition. -- Bo Berglund Developer in Sweden _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal