Structure Frage

Anfängerfragen zum Programmieren mit PureBasic.
DW

Structure Frage

Beitrag von DW »

Hallo erstmal. Ich habe mir structure in der PB Hilfe angeguckt wollte jetzt wissen, wie ich :

Code: Alles auswählen

Structure test
a.l
b.l
EndStructure

format.test
format\a=2
format\b=7

Debug @format
bei diesem Beispiel durch @format die Werte von a und b bekommen kann.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

@format gibt die die Position im Speicher zurück wo sich die beiden LONG werte A und B befinden

das heißt du kannst mit PeekL(@format) a bekommen und mit PeekL(@format+4) b
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
DW

Beitrag von DW »

Danke dir!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Oder du nimmst gleich besser

Code: Alles auswählen

Debug format\a
Das geht auch!

Dann musst du dich nicht mit den Pointer rumärgern.

In diesem Zusammenhang sieh dir mal die Schlüsselwörter With / EndWith an (nur PB 4).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

es gibt sonst auch eine offset-funktion:

Code: Alles auswählen

Structure test
a.l
b.l
EndStructure
format.test

format\a=2
format\b=7

Debug format\a
Debug PeekL( @format + 0 )
Debug PeekL( @format + OffsetOf(test\a) )
Debug ""
Debug format\b
Debug PeekL( @format + 4 )
Debug PeekL( @format + OffsetOf(test\b) )
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Wenn man mit Peek und Poke, sowie offset arbeiten will. dann mach es keinen Sinn erst eine Strukture anzulegen, sondern nur Speicher anzufordern. (AllocateMemory)

Strukturen sind dafür da um Struktuell mit Daten zu arbeiten. Diese dann mit Poke und Peek zu verwenden für automatisch zu einer unsauberen programmierung.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@DW
falls es um procedures geht

Code: Alles auswählen

Structure test
a.l
b.l
EndStructure

format.test
format\a=2
format\b=7


Procedure foo( *p.test )
  Debug "proc: "+Str( *p\a )
  Debug "proc: "+Str( *p\b )
EndProcedure

foo( format )
..aber das wirst du vermutlich schon wissen.
my pb stuff..
Bild..jedenfalls war das mal so.
DW

Beitrag von DW »

>@format
das macht schon Sinn. Vielleicht will man ja, oder vielleicht will ich ja auch, dass man einer procedure auf diese Art die Werte übergibt.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

wenn du nicht die ganze structure, sondern nur einzelne feld-werte übergeben willst, brauchst du dich erst recht nicht um addressen kümmern

Code: Alles auswählen

Procedure foo2( n.l )
  Debug "proc: "+Str( n )
EndProcedure

foo2( format\a )
..oder versteh ich da was falsch
my pb stuff..
Bild..jedenfalls war das mal so.
DW

Beitrag von DW »

Will ich aber nicht. Soll schon proc(@format) sein.
Das macht dann Sinn, wenn man einer Prozedur z.B 20 Werte übergeben muss. Das wär ja blöde:
test(a,b,c,d,e,f,g,h..)

Einfach so:
format.struc
format\a=2
format\b=2

test(@format)
Antworten