Aktuelle Zeit: 28.02.2020 01:56

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur
BeitragVerfasst: 15.01.2020 20:42 
Offline

Registriert: 09.02.2017 13:54
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:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur
BeitragVerfasst: 15.01.2020 21:16 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Kleiner Fehler beim anlegen des Speichers
Code:
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 / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur
BeitragVerfasst: 15.01.2020 21:27 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Oder so:

Code:
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:
Zitat:
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: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur
BeitragVerfasst: 15.01.2020 21:27 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Man kann auch ein Array als Parameter übergeben...

ccode_new war schneller 8)

Code:
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 / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Array vom Typ Mehrfach-Struktur und Übergabe an Procedur
BeitragVerfasst: 15.01.2020 21:38 
Offline

Registriert: 09.02.2017 13:54
.... Suuuuuper .... :allright:

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

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye