Seite 1 von 1

Listen in Structures

Verfasst: 20.11.2022 21:36
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

Re: Listen in Structures

Verfasst: 20.11.2022 23:42
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

Re: Listen in Structures

Verfasst: 21.11.2022 00:17
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)

Re: Listen in Structures

Verfasst: 21.11.2022 09:55
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!