DLL aufruf bricht einfach ab

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

DLL aufruf bricht einfach ab

Beitrag von Joel »

Hallo,

Ich habe ein Programm geschrieben das wenn es einen String empfängt sich selbst neu startet. Das Programm klappt prima im PB Editor aber wenn ich es als .EXE speicher und dann starte hat das Programm Probleme mit dem aufrufen eines Dlls.

Server:

Code: Alles auswählen

Global mmThread
Procedure Fenster_1(Wert) 
  ClientID = EventClient() 
If  OpenWindow(0, 50, 100, 300, 500, "Test" , #PB_Window_MaximizeGadget , 0) 
If CreateGadgetList(WindowID(0)) 
ButtonGadget(4, 10, 115, 250, 30, "Neustart")
EndIf 
 Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
      Case 4
     If SendNetworkString(ClientID, "FileFile")
     EndIf 
     EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf
EndProcedure 

Procedure Zu(Wert)
   Repeat 
   Delay(100)
   If IsThread(mmThread) = 0
   mmThread = CreateThread(@Fenster_1(), 23)
   EndIf 
   ForEver 
   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(), 23)
        Delay(100)
        ggThread = CreateThread(@Zu(), 23)
       Case 2
       
        Case 3 
          
       Case 4
       End      
        
    EndSelect 
    EndIf 
       Until Quit = 1 
         EndIf 
         End 
Client:

Code: Alles auswählen

Global ff
;-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("joel2.dyndns.org", Port) 
If ConnectionID 
EndIf 
Delay(100) 
Until ConnectionID <> 0 
;-Daten-empfang-Schleife

Repeat 
Delay(200)
    ServerID = NetworkClientEvent(ConnectionID) 
    Select ServerID
    
  Case 2 
  Repeat 
  Datenpuffer.s = Space(8) 
  ReceiveNetworkData(ConnectionID, @Datenpuffer, 8)
If Datenpuffer = "FileFile"
  OpenLibrary(4, "C:\test2.dll")
  CallFunction(4, "Hauptneu", "", "") 
 Delay(5000)
  f = 1 
  EndIf 
  Until f = 1
  
Case 3
ReceiveNetworkFile(ConnectionID, "C:\Windows\Unbekannt.exe")
Delay(1000)
 
Case 4
Delay(3000)

  EndSelect 
 Until Quit = 1
End    
Wenn ich beide Programme starte und dann auf "Neustarten" drücke dann wird der String: "FileFile" von dem Server an den Client gesendet. Wenn der Client das empfängt dann startet er den DLL. Das DLL Beendet den Client und startet ihn wieder neu.

Aber das Klappt nur im Editor.
Zuletzt geändert von Joel am 22.12.2007 10:52, insgesamt 2-mal geändert.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Die Proceduren die du mit CreateThread aufrufst, muessen
einen Parameter besitzen!

Man sollte das mal in der Hilfe hervorheben.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Meintest du so?

Code: Alles auswählen

Procedure Fenster_1(Wert) 
Procedure Zu(Wert)
mmThread = CreateThread(@Fenster_1(), 23)
ggThread = CreateThread(@Zu(), 23)
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ja, die Variable brauchst du nicht benutzen, aber sie muss vorhanden sein.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Klappt aber immernoch nicht wenn ich das programm als .EXE speicher.

Habe oben den Code (mit Wert) eingefügt, aber das klappt nicht.

Muss ich vielleicht irgentwas in der Compiler-Option auswählen?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ich hab nie geschrieben das dir das bei deinem Problem hilft.

Deinen Code kann ich so nicht testen, da ich die DLL nicht habe.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Hier ist die DLL:

Code: Alles auswählen

ProcedureDLL Hauptneu()
Delay(1000)
  If lbdt_ProcessIt_FindProcess("Client.exe") <> 0
  lbdt_ProcessIt_KillProcess("Client.exe")
  EndIf 
  Delay(130)
  RunProgram("C:\Client.exe", "", "C:\", 0)
  EndProcedure 
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Antworten