Einer Userlib Prozeduren übergeben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Einer Userlib Prozeduren übergeben

Beitrag von Bisonte »

Fortsetzung wegen Topicwechsel von hier http://purebasic.fr/german/viewtopic.ph ... 60#p291660

Beispiel einer ServerEventloop in einer Userlib:

die Userlib:

Code: Alles auswählen

;##### Userlib

EnableExplicit

Prototype.i servereventprozeduren(Client.i)

Structure proc_liste
  ServerID.i
  ServerProc.servereventprozeduren[3]  
EndStructure

ProcedureDLL.i ServerEventLoop(*procs.proc_liste)  
  Protected Client.i, SEvent.i
  
  If *procs\ServerID
    SEvent = NetworkServerEvent()
    
    If SEvent
      Client = EventClient()  
      Select SEvent
        Case #PB_NetworkEvent_Connect
          *procs\ServerProc[0](Client)
        Case #PB_NetworkEvent_Disconnect
          *procs\ServerProc[1](Client)
        Case #PB_NetworkEvent_Data
          *procs\ServerProc[2](Client)
          ;##### File lass ich mal weg (geht über Data)
        Default
          ;#####  Falls als Threadaufruf Delay(1) und in Schleife
      EndSelect
    EndIf 
  EndIf

EndProcedure
dann der server:

Code: Alles auswählen

;##### Aufruf der Userlib

EnableExplicit

Prototype.i servereventprozeduren(Client.i)

Structure proc_liste
  ServerID.i
  ServerProc.servereventprozeduren[4]  
EndStructure

Define SV_Procs.proc_liste
Define Event.i, ServerID.i

Procedure.i SV_Data(Client.i)
  Debug "Empfange Daten"
EndProcedure
Procedure.i SV_Connect(Client.i)
  Debug "Client kommt"
EndProcedure
Procedure.i SV_DisConnect(Client.i)
  Debug "Client geht"
EndProcedure

InitNetwork()

ServerID = CreateNetworkServer(#PB_Any,6686)

If ServerID
  With SV_Procs
    \ServerID = ServerID
    \ServerProc[0] = @SV_Connect()
    \ServerProc[1] = @SV_DisConnect()
    \ServerProc[2] = @SV_Data()
  EndWith
  
  
  OpenWindow(0,0,0,100,100,"Test")
  
  Repeat 
    Event = WaitWindowEvent(20)
    ServerEventLoop(SV_Procs)
  Until Event = #PB_Event_CloseWindow
EndIf
und der mini client :

Code: Alles auswählen

InitNetwork()
Con = OpenNetworkConnection("localhost",6686)
If Con
  CloseNetworkConnection(Con) 
EndIf
und nun frag ich einfach mal, ob es so gang und gäbe ist, Prozeduren, die später erst im Programm
(nicht in Userlib/Dll) erstellt werden so zu übergeben.
PS: auch hier sollte man aber nach möglichkeit Import verwenden
Ist es denn hier notwendig ? Da es sich ja am Ende um eine Userlib handelt.

P.S.: Mit Tailbite 1.4.7 compiliert und dieses Beispiel funktioniert, daher jetzt meine Frage.
Oder hab ich gar irgendetwas wichtiges übersehen ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​