EnableExplicit
Structure MESSDATEN
NiedrigerWert.i
HoherWert.i
EndStructure
Procedure.i LadeMessdaten()
Protected *daten.MESSDATEN = AllocateMemory(SizeOf(MESSDATEN))
If *daten
*daten\NiedrigerWert = 2
*daten\HoherWert = 98
EndIf
ProcedureReturn *daten
EndProcedure
Procedure Message(*daten.MESSDATEN)
If 45 < *daten\HoherWert
MessageRequester("Information", "Endwert ist zu klein. Klassenbreite erhöhen.", #PB_MessageRequester_Ok)
EndIf
Debug *daten\HoherWert
EndProcedure
Define *daten.MESSDATEN = LadeMessdaten()
Message(*daten)
Debug *daten\NiedrigerWert
Debug *daten\HoherWert
Debug "-----"
ClearStructure(*daten, MESSDATEN) ; nur erforderlich, wenn Strings, Listen o. ä. in der Structure
FreeMemory(*daten)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Da daten.MESSDATEN mit Static definiert wurde, ist die Variable auch nach dem Verlassen der Prozedur gültig und somit auch der zurückgegebene Zeiger auf diese Variable.
Somit ja, der Code ist so "erlaubt", also lauffähig.
Auch Message(*daten) ist ok, da es ja dort dann nur ein Zeiger ist, zu einer Variable die ja noch gültig ist.
Der Weg über AllocateMemory ist nicht empfehlenswert, da du dann irgendwo wieder freigeben musst.
Es ist nur dann nötig, wenn du meherere mögliche Ergebnisse haben möchtest und verwalten willst.
Denn in deinem Code kann es immer nur einen Inhalt für daten.MESSDATEN geben