Dobrý den,
lze nějakým způsobem pomocí funkce GetVarNameByAdr získat jméno prvku struktury, zde např. 'testStruct.testReal' ?
Něco ve smyslu: g_varIntName := GetVarNameByAdr( varAdr := void(testStruct.testReal), varSize := sizeof(real));
Děkuji.
Odpovědi 4
Dobrý den,
funkce GetVarNameByAdr
se většinou používá opačně, tedy ke zjištění jména instance. Funkce vrací plné jméno, takže jméno prvku lze z navráceného řetězce získat. Omezením je, že funkce pracuje pouze s bajtovými adresami, takže nejde použít na prvky typu BOOL.
V přiloženém souboru je funkce, která jméno prvku struktury vrací. Pro správnou funkci je nutné, aby prvek struktury byl označen direktivou {TRACK_ADR}
a nebyl typu BOOL.
Pro správnou funkci se prosím ujistěte, že máte poslední verzi prostředí 2021.1.2 Fix2 (v předchozí verze se negenerovala mapa pro {TRACK_ADR}
správně)
Příklad v předchozí reakci obsahuje chybu. V cyklu chybí dekrementace délky řetězce, takže by funkce končila chybou, pokud by vstupem byla jednoduchá proměnná, jejíž jméno by neobsahovalo znak tečka.
V přiloženém souboru je opravená funkce.
Dobrý den. V poslední verzi Mosaicu 2021.1 Fix 2 mi funkce stále nefuguje. Vrací prázdný řetězec.
Všiml jsem si anomálie, která by s tím mohla souviset:
Když má struktura g jen jednu položku m1, vrací GetVarNameByAdr() jenom "g" namísto "g.m1". (Možná důsledek rovnosti sizeof(g.m1)=sizeof(g) ?)
Jakmile do struktury přidáme další položku m2, už vrací "g.m1".
Viz přiložený kód.
Tento dotaz je vyřešený.