Wenn du Pointern arbeitest, musst du daran denken, dass alles ByRef
übergeben wird und ByVal.
Structure Frage
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
@dw
hallo, *.klopf.klopf.*
wie du in der proc auf die daten der ganzen structure zugreifen
kannst, wurde gezeigt. und zwar ohne @. wenn ich mich nicht
irre brauchst du ein @ sowieso nur für primitive typen. arrays,
und struktuierte typen geben ihre addresse einfach so preis,
wenn du kein index oder feld angibst.
hallo, *.klopf.klopf.*
wie du in der proc auf die daten der ganzen structure zugreifen
kannst, wurde gezeigt. und zwar ohne @. wenn ich mich nicht
irre brauchst du ein @ sowieso nur für primitive typen. arrays,
und struktuierte typen geben ihre addresse einfach so preis,
wenn du kein index oder feld angibst.
-
- Beiträge: 476
- Registriert: 23.03.2005 23:19
Geil. Wir sind in einer Ratestunde..Vielleicht will man ja, oder vielleicht will ich ja auch,
@dw:
Wenn du eine Struktur übergeben möchtest, dann kannst du das auf die Art und Weise machen, wie es #NULL dargestellt hat.
Dass Adressierungszeichen @ ist für die Strukturübergabe nicht notwendig. Du musst nur aufpassen, dass du mit einem Zeiger auf eine Struktur in der Prozedur arbeitest.
Beispiel für Zeiger:
Code: Alles auswählen
;# Eine Struktur deklarieren
Structure _STRUC
Feld1.l
Feld2.l
EndStructure
;# Eine lokale Variable vom Typ _STRUC definieren. (Verbraucht sizeof(_STRUC) Bytes)
Lokal._STRUC
;# Einen Zeiger auf einen strukturierten Speicherblock vom Typ _STRUC definieren.
;# Würde ich jetzt ohne Initialisierung in den Zeiger schreiben (*Zeiger\Feld1 = 3),
;# dann würde ich einen IMA (invalid memory access) bekommen.
*Zeiger._STRUC
;# Hier weise ich dem Struktuzeiger "*Zeiger" die Adresse der lokalen Variable "Lokal" zu.
;# dadurch zeigen beide Variablen auf den gleichen Speicherbereich.
*Zeiger = Lokal
;# Wenn ich jetzt über "Zeiger" einen Wert lade, ändert er sich natürlich in Lokal auch, weil es
;# ja der gleiche Speicherbereich ist.
*Zeiger\Feld1 = 666
;# Mittels Debug überprüfe ich das, und siehe da, es ist gleich.
Debug Lokal\Feld1
;# Umgekehrt gehts natürlich auch:
Lokal\Feld2 = 999
Debug *Zeiger\Feld2
Optimismus ist ein Mangel an Information.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Strukturen übergeben und maipolieren
FF 
Code: Alles auswählen
Procedure test(*format.test)
*format\a = 100
EndProcedure

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive