Seite 1 von 2

Structure Frage

Verfasst: 19.10.2006 23:29
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.

Verfasst: 19.10.2006 23:35
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

Verfasst: 19.10.2006 23:37
von DW
Danke dir!

Verfasst: 20.10.2006 09:49
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).

Verfasst: 20.10.2006 09:56
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) )

Verfasst: 20.10.2006 12:57
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.

Verfasst: 20.10.2006 13:36
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.

Verfasst: 20.10.2006 14:49
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.

Verfasst: 20.10.2006 14:55
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

Verfasst: 20.10.2006 15:30
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)