Strucktur - Procedure Return Problem

Anfängerfragen zum Programmieren mit PureBasic.
PWorks
Beiträge: 8
Registriert: 15.11.2015 23:33

Strucktur - Procedure Return Problem

Beitrag von PWorks »

Nun habe ich ein Problem, ich möchte ein neue Klasse anlegen diese dann ausgeben ca so.

Code: Alles auswählen

Structure TFPS
	Count.i
	Timer.I
	Frame.i
EndStructure

Procedure NewFPS.TFPS()
	F.TFPS
	F\Timer=ElapsedMilliseconds()
	Return F
EndProcedure
wenn ich nun z.b.
MeinFPS = NewFPS()
machen würde das ich die felder Count Timer Frame abfrfen kann ca SO

MeinFPS\Frame

das ganze ist also mein vorhaben, ich scheitere allerdings schon am ersten code oben, warum? weil ich nicht weis wie ich eine structure (also eine klasse) Returnen kann.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Strucktur - Procedure Return Problem

Beitrag von ts-soft »

So geht es nur mit Pointern:

Code: Alles auswählen

EnableExplicit

Structure TFPS
  Count.i
  Timer.i
  Frame.i
EndStructure

Procedure NewFPS()
  Protected *F.TFPS
  *F.TFPS = AllocateMemory(SizeOf(TFPS))
  *F\Timer = ElapsedMilliseconds()
  ProcedureReturn *F
EndProcedure

Define *Mein.TFPS = NewFPS()
Debug *Mein\Timer

FreeMemory(*Mein)
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.
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Strucktur - Procedure Return Problem

Beitrag von ProgOldie »

@ts-soft: Frage zu dem Beispiel:

Was ist eigentlich der grundsätzliche Unterschied zwischen AllocateMemory() und AllocateStructure(), von der Parameterübergane 'mal abgesehen. Kann man sagen, dass AllocateMemory() etwas flexibler, dafür aber AllocateStructure() für weniger erfahrene Anwender sicherer ist?
Es müssten doch
AllocateMemory(sizeOf(Strukturbez)) und AllocateStructure(Strukturbez) Identisches bewirken.
Zuletzt geändert von ProgOldie am 16.11.2015 09:24, insgesamt 1-mal geändert.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Strucktur - Procedure Return Problem

Beitrag von GPI »

Mit AllocateMemory wird ein beliebig großer Speicher reserviert. Mit AllocateStructure wird ein Speicher reserviert, der genau die passende Größe für diese Struktur hat. Wenn in dieser Struktur eine Map und LinkedList ist, dann wird zudem diese initalisiert, so das man sie nutzen kann.

@pworks
Klassen gibt es in PureBasic nicht. Das muss man händisch alleine machen, schau mal in diesen Thread: http://www.purebasic.fr/german/viewtopi ... =8&t=29124
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Strucktur - Procedure Return Problem

Beitrag von ProgOldie »

@GPI
o.k. und danke, dann ist mir das klar.
Sorry übrigens, dass ich in der Zwischenzeit deiner Antwort meine Anfrage noch 'mal geändert habe. Für mich bleibt es bei dem wesentlichen Unterschied, dass man für eine bekannte Struktur sicherer AllocateStructure(StructureName) verwenden sollte.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Strucktur - Procedure Return Problem

Beitrag von ts-soft »

AllocateStructure ist nur erforderlich, wenn dynamische Elemente in der Structure enthalten sind. Wenn keine
dynamischen Elemente enthalten sind, sollte AllocateMemory schneller sein.
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.
Bild
Antworten