Seite 1 von 1

Variable *Parameters innerhalb einer Procedure

Verfasst: 15.08.2019 09:03
von Sommertv
Guten Morgen,
ich bekomm hier die Fehlermeldung, dass *Parameters keine Structure hat, obwohl es definiert ist.
Komm nicht drauf, wo der Fehler liegen könnte, hab es schon mit Global versucht, aber selbes Ergebnis.

Code: Alles auswählen

Enumeration Window
   #VideoConverter
   #Textausgabe
   #button
EndEnumeration   

Structure VideoDatei
FileName$
Abschluss.i
EndStructure

Define Parameters.VideoDatei
;Global Parameters.VideoDatei

Procedure MyThread(*Parameters.VideoDatei)
    Define ShellPrg, Filename$, Dummy$
    Debug *Parameters\FileName$
    Debug *Parameters\Abschluss
 ;   ShellPrg= RunProgram("youtube-dl", Chr(32) + FileName$, "",  #PB_Program_Open | #PB_Program_Write | #PB_Program_Read | #PB_Program_Error)
    *Parameters\Abschluss = 1
  EndProcedure

Procedure Download() 
   Define i, DelFlag, Filename$, *Parameters
    For i= 1 To 9
    FileName$ = GetGadgetText (i)
    If FileName$ <> "" And GetGadgetState(i) = 1
      Debug FileName$
      *Parameters\FileName$ = FileName$
      *Parameters\Abschluss = 0
 ;     CreateThread ( @MyThread () , *Parameters.VideoDatei) 
    EndIf
    Next
 EndProcedure    

Procedure Open_MainScreen() 
OpenWindow(#VideoConverter, 0, 0, 400, 200, "VideoConverter",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   EditorGadget(#Textausgabe,10,10,380,40)
   ButtonGadget(#button,300,170,90,20,"Download")
EndProcedure

Open_MainScreen()

Repeat
   Select WaitWindowEvent()       
      Case #PB_Event_Gadget   
         Select EventGadget()
            Case #button
              Download()              
         EndSelect
      Case  #PB_Event_CloseWindow
         Ende=#True
   EndSelect      
Until Ende=#True
Dank schon mal im Vorab
Kurt

Re: Variable *Parameters innerhalb einer Procedure

Verfasst: 15.08.2019 09:09
von DarkDragon
Sommertv hat geschrieben:Guten Morgen,
ich bekomm hier die Fehlermeldung, dass *Parameters keine Structure hat, obwohl es definiert ist.
In Download jedoch nicht mit Structure:

Code: Alles auswählen

Procedure Download()
   Define i, DelFlag, Filename$
   Define *Parameters.VideoDatei
Aber das wird dennoch so nicht klappen, weil *Parameters dann erstmal auf Adresse 0 zeigt. Du müsstest dann mit AllocateMemory o.ä. genügend Speicher reservieren und am Ende auch freigeben.

Re: Variable *Parameters innerhalb einer Procedure

Verfasst: 15.08.2019 10:43
von Sommertv
Supi, danke das war es..
Du meinst so:

Code: Alles auswählen

Procedure Download()
   Define i, DelFlag, Filename$, *Parameters.VideoDatei
  *Parameters.VideoDatei = AllocateMemory(SizeOf(VideoDatei))

Re: Variable *Parameters innerhalb einer Procedure

Verfasst: 15.08.2019 12:39
von mk-soft
Ich verwendet meistens AllocateStructure...

Mit FreeStructure werden dann auch der Speicher von den String mit freigegeben, sonst hast du mit FreeMemory ein Speicherleck.

Re: Variable *Parameters innerhalb einer Procedure

Verfasst: 15.08.2019 13:19
von Josh
mk-soft hat geschrieben:Mit FreeStructure werden dann auch der Speicher von den String mit freigegeben, ...
+ Array werden freigegeben
+ Lists werden freigegeben
+ Maps werden freigegeben