Code : Tout sélectionner
; Petit exemple simple de démonstration de partage de mémoire
; CreatefileMapping: retourne le Handle de l'objet mémoire identifié par le nom "Mapping"
; si celui-ci n'existe pas, il le crée
; MapViewOfFile: permet d'obtenir un pointeur d'accès sur cette zone mémoire.
; Tout processus souhaitant travaillé avec cette zone de mémoire doit appelé ces deux API
; à vous ensuite de gérer les processus afin qu'ils accèdent aux données de manière cohérente
; afin de s'assurer que les données aient été lues avant d'être modifiées
Enumeration
#Window
#StringGadget
#BOUTON
EndEnumeration
Structure Partage
valeur1.l
valeur2.l
valeur3.l
valeur4.l
EndStructure
Global *VueDonnees.Partage
If OpenWindow(#Window,0,0,160,160,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Mapping Envoie")
CreateGadgetList(WindowID(#Window))
StringGadget(#StringGadget,10, 10,100,20,"123456789")
ButtonGadget(#BOUTON, 10, 90, 100, 20, "Envoyer")
MemoirePartagee=CreatefileMapping_($FFFFFFFF,#null, #PAGE_READWRITE, 0, SizeOf(Partage),"Mapping")
*VueDonnees=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
Repeat
EventID.l=WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #BOUTON
Donnee1$=GetGadgetText(#StringGadget)
Donnee1=Val(Donnee1$)
*VueDonnees\valeur1=Donnee1
;MessageRequester("Info",Str(*VueDonnees\valeur1))
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit=1
EndIf
Code : Tout sélectionner
Enumeration
#Window
#StringGadget
#BOUTON
EndEnumeration
Structure Partage
valeur1.l
valeur2.l
valeur3.l
valeur4.l
EndStructure
Global *VueDonnees.Partage
If OpenWindow(#Window,0,0,160,160,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Mapping Reçoit")
CreateGadgetList(WindowID(#Window))
StringGadget(#StringGadget,10, 10,100,20,"")
ButtonGadget(#BOUTON, 10, 90, 100, 20, "Recevoir")
MemoirePartagee=CreatefileMapping_($FFFFFFFF,#null, #PAGE_READWRITE, 0, SizeOf(Partage),"Mapping")
*VueDonnees=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
Repeat
EventID.l=WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #BOUTON
SetGadgetText(#StringGadget,Str(*VueDonnees\valeur1))
;MessageRequester("Info",Str(*VueDonnees\valeur1))
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit=1
EndIf