read error at adress 17 bei sämtlichen Untils

Anfängerfragen zum Programmieren mit PureBasic.
Little John

Beitrag von Little John »

Joel hat geschrieben:So, der Code ist Optimiert, jetzt kommt aber "Invalid Memory Access"
Diese Art der Optimierung kannte ich noch gar nicht. :D

SCNR, Little John
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Und wo kommt dieser Fehler ?
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Im Server, und zwar bei EndProcedure. In Fenster_1
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Der Code ist ziemlich unübersichtlich. Was ist zum Beispiel das?

Code: Alles auswählen

     Repeat 
     If F = 70 

     CloseWindow(0) 
     F = 0 
     Goto Ende_Fenster: 
     EndIf 
     Until m = 55
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ich sollte ja kein KillThread verwenden. Und statt Kill Thread gibt das Programm einfach F = 70 zurück und dann beendet sich die Procedure. Bzw. inmeinem Fall mit Fehlermeldung
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

1) Wozu Repeat Until?
2) ProcedureReturn?
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

marco2006 hat geschrieben:1) Wozu Repeat Until?
2) ProcedureReturn?
Gute Idee, bau ich sofort ein :D
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Wozu "":

Code: Alles auswählen

WriteStringN(4, ""+Text$+"", 0)
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Habe das jetzt Verbesert, ich bekomme zum Glück keine Fehlermlungen mehr. Das Problem ist aber, dass ich ja im Server in der Procedure "ListIcon" eine Image lade, die später in dem Gadget anzegeigt wird. Wenn ich aber ein zweites mal eine Pfad eingebe, wird das Bild nichtmehr im Gadget angezeigt, wiso??

Server:

Code: Alles auswählen

Global Win.s
Global mmKill
Global E
Global F

E = 0
F = 0
Win.s = GetEnvironmentVariable("windir")



Procedure ListIcon(Ya.l) 
E = 0
If OpenWindow(10, 0, 0, 500, 550, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(10))
UseJPEGImageDecoder()
ListIconGadget(11,  1,  1, 599, 550, "Name", 300)
AddGadgetColumn(11, 1, "Größe in Byte", 200)
LoadImage(6, "C:\1.JPEG", 0)
LoadImage(7, "C:\Datei.JPG", 0)
ReadFile(8, Win.s+"\Inhalt.txt")
ColumnPos = 0

For x = 1 To 500
a$ = ReadString(8, 0)
b$ = ReadString(8, 0)
c$ = ReadString(8, 0)

If a$ = "Datei"
AddGadgetItem(11, -1, b$ , ImageID(6))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf 
If a$ = "Ordner"
AddGadgetItem(11, -1, b$ , ImageID(7))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf 
ColumnPos+1
Next   

Repeat
If E = 5
ProcedureReturn
EndIf 
   
Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
EndProcedure 
  
  
  
 



Procedure Ort(Dummi.l)
If OpenWindow(8, 300, 400, 300, 300, "Durchsuchen", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu)
     If CreateGadgetList(WindowID(8))
     StringGadget(9, 1, 1, 100, 25, "" , 0) 
     ButtonGadget(5, 100, 30, 40, 40, "OK", 0)
     EndIf 
     
     Repeat
     EventID = WaitWindowEvent()
      If EventID = #PB_Event_Gadget
      Select EventGadget()
      
      Case 5
      Text$ = GetGadgetText(9)
      CreateFile(4, "C:\drf.txt")
      WriteStringN(4, ""+Text$+"", 0)
      CloseWindow(8)
      CloseFile(4)
      G = 4
      EndSelect
      
      EndIf  
      Until EventID = #PB_Event_CloseWindow Or G = 4
      EndIf 
EndProcedure





Procedure Fenster_1(Dussi.l)
ClientID = EventClient() 
If  OpenWindow(0, 50, 100, 300, 500, "Server zum Herunterfaheren" , #PB_Window_SystemMenu , 0) 
If CreateGadgetList(WindowID(0)) 
ButtonGadget(1, 10, 290, 250, 30, "Durchsuchen")
EndIf 
Repeat

    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
    Select EventGadget()
         
    Case 1  
    Ort(Dummi.l)
    SendNetworkFile(ClientID, "C:\drf.txt")
    Delay(1000)
    DeleteFile("C:\drf.txt")
    SendNetworkString(ClientID, "RausRaus")
    ProcedureReturn Dussi.l
     
  EndSelect

  EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf
EndProcedure 







If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

Port = 6705
Buffer = AllocateMemory(1000) 

If CreateNetworkServer(0, Port) 

   Repeat 
   Delay(200)
   SEvent = NetworkServerEvent() 
   If SEvent 
   ClientID = EventClient() 
   Select SEvent 
   
   
   Case 1 
   mmThread = CreateThread(@Fenster_1(), 1)      
       
       
   Case 2
   Datenpuffer.s = Space(4) 
   ReceiveNetworkData(ClientID, @Datenpuffer, 4) 
   
   If Datenpuffer = "drin"
      E = 5
   CopyFile(Win.s+"\fm.png", Win.s+"\Inhalt.txt")
   ListThread = CreateThread(@ListIcon(), 1)
   mmThread = CreateThread(@Fenster_1(), 1)
   EndIf 
   
   
   Case 3
   DeleteFile(Win.s+"\fm.png")
   ReceiveNetworkFile(ClientID, Win.s+"\fm.png")
   
                     
   Case 4
   MessageRequester("Trennug", "Der Client wurde getrennt", 0)
   End 
    
    EndSelect 
    EndIf 
       Until Quit = 1 
         EndIf 
         End     
Client:

Code: Alles auswählen

; 
; ------------------------------------------------------------ 
; 
;   Mein kleiner Client
; 
;    
; 
; ------------------------------------------------------------ 
; 
Global ff
Global Win.s
Global Pfad$
Win.s = GetEnvironmentVariable("windir")


Procedure Namen(Dummi.l)
ReadFile(3, Win.s+"\Pfad.txt")



Pfad$ = ReadString(3, 0)
If Pfad$ <> "" 
  FF = CreateFile(#PB_Any, Win.s+"\Inhalt.txt") 
  If FF 
     ED = ExamineDirectory(#PB_Any, Pfad$, "*.*") 
    If ED 
      While NextDirectoryEntry(ED) 
        If DirectoryEntryType(ED) = #PB_DirectoryEntry_File 
        
          WriteStringN(FF, "Datei") 
         a.q = DirectoryEntrySize(ED)
          
        Else 
          WriteStringN(FF, "Ordner") 
         a.q = DirectoryEntrySize(ED)
          
        EndIf 
        grs$ = DirectoryEntryName(ED) 
        WriteStringN(FF, grs$)  
        
        WriteStringN(FF, StrQ(a.q)) 
      Wend 
      FinishDirectory(ED) 
    EndIf 
    CloseFile(FF)  
  EndIf 
EndIf
EndProcedure 
  
 

 


;-Vorbereiten der Netzwerk-Einstellungen
If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

Port = 6705

;-Schleife zur Verbindungs-Herstellung
  Repeat 
  ConnectionID = OpenNetworkConnection("127.0.0.1", Port) 
Delay(300) 
Until ConnectionID <> 0 

;-Daten-empfang-Schleife
Repeat 
Delay(300)
    
    ServerID = NetworkClientEvent(ConnectionID) 
    Select ServerID
 
  Case 2 
  Repeat 
  Datenpuffer.s = Space(8) 
  ReceiveNetworkData(ConnectionID, @Datenpuffer, 8) 

 
If Datenpuffer = "RausRaus"

CopyFile(Win.s+"\Unbekannt.exe", Win.s+"\Pfad.txt")
DeleteFile(Win.s+"\Unbekannt.exe")
Namen(Dummi.l)
SendNetworkFile(ConnectionID, Win.s+"\Inhalt.txt")
SendNetworkString(ConnectionID, "drin")
DeleteFile(Win.s+"\Pfad.txt")
f = 1
EndIf 





  Until f = 1
  
  

Case 3
ReceiveNetworkFile(ConnectionID, Win.s+"\Unbekannt.exe")

  
  
 
Case 4
Delay(3000)
 
  
  EndSelect 
  
 Until Quit = 1
 
  End   
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Gibt es Vielleicht eine Möglichkeit LoadImage() zu Globalisieren. Also ich lade am Anfang eines Programmes eine Image mit LoadImage(), und kann in einer Procedure die Image in einem Gadget anzeigen, geht dass??
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Antworten