Variable *Parameters innerhalb einer Procedure

Anfängerfragen zum Programmieren mit PureBasic.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Variable *Parameters innerhalb einer Procedure

Beitrag 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
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Variable *Parameters innerhalb einer Procedure

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Variable *Parameters innerhalb einer Procedure

Beitrag 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))
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Variable *Parameters innerhalb einer Procedure

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Variable *Parameters innerhalb einer Procedure

Beitrag 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
Antworten