Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Für allgemeine Fragen zur Programmierung mit PureBasic.
kmais
Beiträge: 45
Registriert: 09.02.2017 13:54

Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Beitrag von kmais »

Hallo, Leute, ... ich bin's mal wieder, der ahnungslose Peter.

Folgendes:

Ich möchte eine Variable mit Struktur-Typ an eine Procedur übergeben.
Diese Struktur hat wiederum eine Variable mit Struktur.
Also etwa folgendes:

Structure inStruct
a.s
b.i
EndStructure

Structure test
Array c.inStruct(0)
d.s
EndStructure

In Sachen der Übergabe habe ich wohl so ziemlich alles durch, was googeln so hergibt. Aber wahrscheinlich habe ich die Sache nicht ganz verstanden, vor allem was Pointer betrifft.
In einem anderen Programm habe ich eine ganz ähnliche Situation, jedoch mit List's und Map's. Ich gehe dabei völlig gleich vor und das ganze läuft sauber. Aber hier funktioniert NICHTS :-(.

Code: Alles auswählen

Structure inStruct
a.s
b.i
EndStructure

Structure test
Array c.inStruct(0)
d.s
EndStructure

Procedure meinTestArray(*e.test)

Debug ;hier möchte ich zum Beispiel 'b' aus inStruct ausgeben, oder ArraySize(*e) abrufen.
;weder *e(0)\c(0)\b wird vom Compiler akzeptiert, noch ArraySize(*e)
EndProcedure


Procedure meinTest()
Dim *e.test(0)
e(0)\c(0)\b=1
meinTestArray(@e())

EndProcedure

meinTest()
Natürlich könnte ich das ganze lösen, indem ich 'e' einfach Global setze und auf die Pointerei verzichte. Aber ich mag Globals nicht so sehr.

Für Hilfe und Klärung wäre ich sehr dankbar.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Beitrag von mk-soft »

Kleiner Fehler beim anlegen des Speichers

Code: Alles auswählen

Structure inStruct
  a.s
  b.i
EndStructure

Structure test
  Array c.inStruct(0)
  d.s
EndStructure

Procedure meinTestArray(*e.test) ; <- *e ist ByRef (Ein Pointer auf die Daten)
  
  ; hier möchte ich zum Beispiel 'b' aus inStruct ausgeben, oder ArraySize(*e) abrufen.
  ; weder *e(0)\c(0)\b wird vom Compiler akzeptiert, noch ArraySize(*e)
  For i = 0 To ArraySize(*e\c())
    Debug *e\c(i)\b
  Next
EndProcedure


Procedure meinTest()
  ;Dim *e.test(0) ; <- Hier ist der Fehler. Wird nur ein Array mit Pointer erstellt und kein
                 ; Speicher für Daten
  
  ; Array
  Dim e.test(1)
  ReDim e(0)\c(1)
  e(0)\c(0)\b=100
  e(0)\c(1)\b=200
  
  meinTestArray(@e(0))
  e(1)\c(0)\b = 300
  meinTestArray(@e(1))
  
  ; Einzel
  Define d.test
  d\c(0)\b = 400
  meinTestArray(@d)
  
  ; Pointer
  Define *p.test
  *p = AllocateStructure(test)
  *p\c(0)\b = 500
  meinTestArray(*p)
  FreeStructure(*p)
  
EndProcedure

meinTest()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Beitrag von ccode_new »

Oder so:

Code: Alles auswählen

Structure inStruct
a.s
b.i
EndStructure

Structure test
Array c.inStruct(0)
d.s
EndStructure

Procedure meinTestArray(Array e.test(1))

Debug e(0)\c(0)\b
EndProcedure


Procedure meinTest()
Dim e.test(0)
e(0)\c(0)\b=1
meinTestArray(e())

EndProcedure

meinTest()
Aus der Hilfe:
Beispiel: Array als Prozedur-Parameter

Procedure fill(Array Numbers(1), length) ; die 1 gibt hier die Anzahl der Dimensionen im Array an.
For i = 0 To length
Numbers(i) = i
Next i
EndProcedure

Dim Numbers(10)
fill(Numbers(), 10) ; das Array Numbers() wird hier als Parameter übergeben

Debug Numbers(5)
Debug Numbers(10)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Beitrag von mk-soft »

Man kann auch ein Array als Parameter übergeben...

ccode_new war schneller 8)

Code: Alles auswählen

Structure inStruct
  a.s
  b.i
EndStructure

Structure test
  Array c.inStruct(0)
  d.s
EndStructure

Procedure meinTestArray(Array e.test(1)) ; <- Parameter 1 = Anzahl Dimesion
  
  ; hier möchte ich zum Beispiel 'b' aus inStruct ausgeben, oder ArraySize(*e) abrufen.
  ; weder *e(0)\c(0)\b wird vom Compiler akzeptiert, noch ArraySize(*e)
  For i = 0 To ArraySize(e())
    Debug e(i)\c(0)\b
  Next
EndProcedure


Procedure meinTest()
  ;Dim *e.test(0) ; <- Hier ist der Fehler. Wird nur ein Array mit Pointer erstellt und kein
                 ; Speicher für Daten
  
  ; Array
  Dim e.test(3)
  e(0)\c(0)\b=100
  e(1)\c(0)\b=200
  e(2)\c(0)\b=300
  e(3)\c(0)\b=400
  meinTestArray(e())
  
EndProcedure

meinTest()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
kmais
Beiträge: 45
Registriert: 09.02.2017 13:54

Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur

Beitrag von kmais »

.... Suuuuuper .... :allright:

Das sind mal verwertbare Antworten.
Und so schnell.
Vielen, vielen Dank.

Da weiß man, was man mit PB mehr hat .... :D
Antworten