Listen in Structures

Für allgemeine Fragen zur Programmierung mit PureBasic.
SMaag
Beiträge: 152
Registriert: 08.05.2022 12:58

Listen in Structures

Beitrag von SMaag »

Man kann Listen in Structures einbinden.
Ich brauche aber in der Structure nur einen Pointer auf eine Liste und das bekomme ich nicht hin.
mit * ohne * mit @Files(). Immer Crash.

Weis jemand ob das geht und wenn ja, wie?
Wenn ich die Liste() nicht in die Structure packe und sie als extra Parameter an die Folge-Procedure übergebe
dann geht mein Code. Mir geht es hier um das Verständnis wie das mit den Listen in den Structures funktioniert.

hier mal der relevante CodeTeil

Code: Alles auswählen

  Structure TSharedParams   ; ListFilesRecursive Shared Parameters
    hRegExp.i
    ActSubLevel.i
    MaxSubLevel.i
    Flags.i
    FileCount.i                 ; File Counter
    DirCount.i                  ; Directory Counter
    pFileFilterCallback.i       ; FilterCallback Preoedure
    List Files.TDirectoryEntry()    !!! Das sollte ein Pointer auf eine Liste sein, keine angelegte Liste!!!
  EndStructure 

Procedure.i ListFiles(Directory$, List Files.TDirectoryEntry())

	Protected P.TSharedParams
	
	P\Files() = Files()  ; hier krackt es immer, obwohl Syntaxcheck ok war! Wie muss man die Liste korrekt als Pointer übergeben???
EndProcedure
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Listen in Structures

Beitrag von Sicro »

Code: Alles auswählen

Structure ListStruc
  List entries.i()
EndStructure

Define.ListStruc myList

AddElement(myList\entries())
myList\entries() = 1

AddElement(myList\entries())
myList\entries() = 2

*pointer.ListStruc = @myList

ForEach *pointer\entries()
  Debug *pointer\entries()
Next
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Listen in Structures

Beitrag von STARGÅTE »

Das geht so direkt in PureBasic leider nicht.
Hier musst du die Liste in eine Struktur einbetten und dann den Pointer der Struktur übergeben.
Ansonsten übergibst du immer nur ein Element und wenn es keins gibts, kommt ein Fehler.

Code: Alles auswählen

Structure TDirectoryEntry
	Name.s
EndStructure

Structure FilesList
	List Files.TDirectoryEntry()
EndStructure

Structure TSharedParams   ; ListFilesRecursive Shared Parameters
	hRegExp.i
	ActSubLevel.i
	MaxSubLevel.i
	Flags.i
	FileCount.i                 ; File Counter
	DirCount.i									; Directory Counter
	pFileFilterCallback.i				; FilterCallback Preoedure
	*FilesList.FilesList
EndStructure 

Procedure.i ListFiles(Directory$, *FilesList.FilesList)
	
	Protected P.TSharedParams
	
	P\FilesList = *FilesList
	
	ForEach P\FilesList\Files()
		Debug P\FilesList\Files()\Name
	Next
	
EndProcedure

Define FilesList.FilesList

AddElement(FilesList\Files())
FilesList\Files()\Name = "Hallo"

ListFiles("", @FilesList)
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
SMaag
Beiträge: 152
Registriert: 08.05.2022 12:58

Re: Listen in Structures

Beitrag von SMaag »

Das geht so direkt in PureBasic leider nicht.
Hier musst du die Liste in eine Struktur einbetten und dann den Pointer der Struktur übergeben.
Danke! Dann ist das klar!
Antworten