Postmessage/Sendmessage benutzen... für Datentransport

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Postmessage/Sendmessage benutzen... für Datentransport

Beitrag von funkheld »

Hallo, guten Tag.
Ich bitte mal um Hilfe für einen Datentransport mit Sendmessage/Postmessage.
Ich weiss nicht welches man nehmen soll. Es soll keine Rückantwort vom entgegennehmenden Programm erfolgen.

Statt wie unten die Daten an den Clienten zu senden : SendNetworkData(ClientID(1), *rbuffer, rdata) , möchte ich die Daten mit Sendmessage/Postmessage an ein anderes Programm senden.

Ich weiss jetzt nicht wie man das realisieren kann, damit das andere Programm die Daten dauernd empfängt.
Wer kann mir mal helfen bei der Erstellung ? Braucht nur ein Minibeispiel sein, welches die Daten entgegennimmt.

Das Datenpaket schwankt immer zwischen 8 Byte und 128 Byte.

Danke.

Gruss

Code: Alles auswählen

Global *rbuffer.l, *sbuffer.l, anz_id.l, rData.l,EventID.l,text.s,id1_test.l

Declare zusi_verbinden()

Enumeration
  #Window_0
  #Editor_0
  #String_0
EndEnumeration

Global Dim ClientID.l(3)

*sbuffer = AllocateMemory(256)
*rbuffer = AllocateMemory(256)
id1_test=0

InitNetwork()
CreateNetworkServer(1, 1435)

OpenWindow(#Window_0, 10, 10, 280, 200, "Tcp-Server", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
EditorGadget(#Editor_0, 10, 40, 200,150)
StringGadget(#String_0, 10, 10, 120, 20, "")
 
Repeat
	EventID = WaitWindowEvent(2)    
	
  Select EventID
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
  EndSelect
	
  Select NetworkServerEvent()
  	Case 1 
  		If anz_id < 3
  		  anz_id=anz_id+1
  		  ClientID(anz_id) = EventClient()
  		  If anz_id=1
  		  	text+"armatur-id:  "
  		  ElseIf anz_id=2
  		  	text+"loksim-id:   "
  		  	zusi_verbinden() 
  		  EndIf	
  		  text+Str(ClientID(anz_id))+Chr(10)
  		  SetGadgetText(#Editor_0, text)
  		EndIf  
  	Case 2
  		rdata=ReceiveNetworkData(ClientID(2), *rbuffer, 256) 
  		SendNetworkData(ClientID(1), *rbuffer, rdata) 	>>>>>> soll rausgenommen werden 
        Send/Postmessage(.......) ???????????????????????
  EndSelect
  
Until EventID = #PB_Event_CloseWindow

Procedure zusi_verbinden()
	If ClientID(2)
    offs = 0 
    PokeL(*sbuffer + 0, $03) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $02) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    SendNetworkData(ClientID(2), *sbuffer, offs)
    Delay(100)
    offs = 0 
    PokeL(*sbuffer + 0, $07) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $03) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    PokeL(*sbuffer + 7, $0A) : offs + 1
    PokeA(*sbuffer + 8, $01) : offs + 1
    PokeA(*sbuffer + 9, $02) : offs + 1
    PokeA(*sbuffer + 10, $09) : offs + 1
    SendNetworkData(ClientID(2), *sbuffer, offs)
    Delay(100)  
    offs = 0 
    PokeL(*sbuffer + 0, $04) : offs + 4
    PokeA(*sbuffer + 4, $00) : offs + 1
    PokeA(*sbuffer + 5, $03) : offs + 1
    PokeA(*sbuffer + 6, $00) : offs + 1
    PokeA(*sbuffer + 7, $00) : offs + 1
    SendNetworkData(ClientID(2), *sbuffer, offs)  
  EndIf  
EndProcedure
Benutzeravatar
mk-soft
Beiträge: 3902
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Postmessage/Sendmessage benutzen... für Datentransport

Beitrag von mk-soft »

Such mal nach WM_COPYDATA

:allright:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Postmessage/Sendmessage benutzen... für Datentransport

Beitrag von funkheld »

Das habe ich gefunden:
PostMessage_(#HWND_BROADCAST, MyMessage, #CloseMessage, 0)

Jetzt wollte ich damit an dem Fenster mit dem Namen "Test" diese Daten senden aus : *rbuffer , ohne Rückmeldung.

Wie geht das?

Danke.

gruss
Benutzeravatar
mk-soft
Beiträge: 3902
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Postmessage/Sendmessage benutzen... für Datentransport

Beitrag von mk-soft »

So geht das nicht. Daten senden geht nur mit WM_COPYDATA. PostMessage MyMessage ist nur dazu da um an das Fensterhandle zu kommen.

Bei WM_COPYDATA kopiert das Betriebssystem die Daten in ein Speichergebiet ab von welchen das andere Programm dann die Daten auslesen kann.
Immer mit Callback und SendMessage arbeiten. Nach verarbeitung der Message gibt dann das BS den Speicher wieder frei.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten