Partage d'information entre applications ?
Partage d'information entre applications ?
Actuellement je partage des données via des fichiers sur le disque dur.
Est-il possible de placer dans une zone mémoire partagé des données ?
Merci.
Est-il possible de placer dans une zone mémoire partagé des données ?
Merci.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: Partage d'information entre applications ?
Oui, tu peux partager une zone mémoire entre plusieur process (il me semble que Dobro avait posté la dessus...), ou alors :
Utiliser les entrées / sortie de tes programmes
Utiliser une connexion locale (le mieux je pense)
Le problème des fichiers c'est surtout les accès (si l'un est en train de lire alors que l'autre ecris dedans c'est pas top mais gérable).
Utiliser les entrées / sortie de tes programmes
Utiliser une connexion locale (le mieux je pense)
Le problème des fichiers c'est surtout les accès (si l'un est en train de lire alors que l'autre ecris dedans c'est pas top mais gérable).
Re: Partage d'information entre applications ?
Ah oui c'etait un code de Nico mais c'etait Dobro qui disait que c'etait un code de Nico...
Bouerf j'y etais presque!
Bouerf j'y etais presque!
Re: Partage d'information entre applications ?
Merci pour vos réponses...
j'ai peur que le code proposé par Cls ainsi que le code sur le forum anglais ne soient compatibles qu'avec Microsoft Windows
Je vais voir ce qui est faisable à partir du réseau (UDP ou TCP) : les instructions réseaux de Purebasic fonctionne dans tous les environnements

j'ai peur que le code proposé par Cls ainsi que le code sur le forum anglais ne soient compatibles qu'avec Microsoft Windows

Je vais voir ce qui est faisable à partir du réseau (UDP ou TCP) : les instructions réseaux de Purebasic fonctionne dans tous les environnements

Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/
Re: Partage d'information entre applications ?
Ah oui, par contre, c'est du Windows seulement.
Effectivement, tu devrais pouvoir t'en sortir avec le réseau.
Effectivement, tu devrais pouvoir t'en sortir avec le réseau.
Re: Partage d'information entre applications ?
bon je sais , c'est seulement pour windows , mais apres avoir testé les mailslots qui sont limité en taille
j'ai trouvé ( je sais plus si j'ai pompé ou pas )
ce code qui offre un véritable Ram disque !!
le format des données qui transite passe par une structure ,, donc permet de faire transiter plusieurs format de donnée en meme temps
et quasi autant qu'on veux !!
voici un exemple :
le code qui reçoit :
ici la fenetre est purement décorative, les données reçues etant affiché par Debug !
notez que le code est court, mais j'ai eu la fleme de retirer les Debug (tiré directement de mon EPB )
le prg qui envoie a lancer apres le prg ci dessus de preference
je ne trahi pas un secret en précisant que c'est ce que j'utilise pour EPB
cela me permet de commander EPB par un prg utilitaire , par exemple faire afficher le code RGB() a l'emplacement du curseur ...
pffff ! mon bon fond, me perdra 
j'ai trouvé ( je sais plus si j'ai pompé ou pas )
ce code qui offre un véritable Ram disque !!
le format des données qui transite passe par une structure ,, donc permet de faire transiter plusieurs format de donnée en meme temps

et quasi autant qu'on veux !!
voici un exemple :
le code qui reçoit :
ici la fenetre est purement décorative, les données reçues etant affiché par Debug !
notez que le code est court, mais j'ai eu la fleme de retirer les Debug (tiré directement de mon EPB )
Code : Tout sélectionner
Enumeration
#win
EndEnumeration
Structure Partage ; le Ram Disque , defini la forme des données qui transite , ici un binaire , une valeur , et meme on pourrai ajouter un text de 500 caractere ...
declencheur.b ; sert dans l'exemple a etre sur qu'on reçois un message
valeur1.i ; la valeur qu'on reçoit er qui va determiner les Cases plus bas
message.S {500} ; eventuellement on pourrai recevoir un text de 500 caracteres en ajoutant "text.s=*ram\message.S" ;)
EndStructure
Global *ram.Partage
;- memoire partagé
MemoirePartagee=CreateFileMapping_($FFFFFFFF,#Null, #PAGE_READWRITE, 0, SizeOf(Partage),"EPB_RAM") ; le nom doit etre le meme pour l'emmeteur et le recepteur
*ram=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
OpenWindow(#win, 10,10,800,600,"reçoit" ,#PB_Window_SystemMenu)
Repeat ; boucle principale
Event= WaitWindowEvent(2)
;- reception message Ram
If *ram\declencheur.b=1
type=*ram\valeur1
Select type
Case 0 ; pose au curseur ..
Debug "recoit 0"
Debug "le message est :" +*ram\message.S
Case 1 ; remplace la ligne
Debug "recoit 1"
Case 2 ; insertion de ligne
Debug "recoit 2"
Case 3 ; saut de ligne ( positione le curseur en y)
Debug "recoit 3"
Case 4 ; positione le curseur en X
Debug "recoit 4"
Case 5 ; Selectionne
Debug "recoit 5"
Case 6 ; remplace
Debug "recoit 6"
Case 7 ; recupe la ligne en cours vers le clipboard
Debug "recoit 7"
Case 8 ; creation d'un onglet et chargement d'un code
Debug "recoit 8"
Case 9 ; recupe le code complet de l'onglet précisé et envoie vers le clipboard
Debug "recoit 9"
Case 10 ; active l'onglet .. rien de plus
Debug "recoit 10"
EndSelect
Buffer.S=""
Beep_(770,100)
*ram\declencheur.b=0
EndIf
Until Event = #PB_Event_CloseWindow
le prg qui envoie a lancer apres le prg ci dessus de preference
je ne trahi pas un secret en précisant que c'est ce que j'utilise pour EPB

cela me permet de commander EPB par un prg utilitaire , par exemple faire afficher le code RGB() a l'emplacement du curseur ...

Code : Tout sélectionner
; ************ OBLIGATOIRE *****************************************
;- structure memoire partagé
Structure Partage
declencheur.b
valeur1.i
message.s {500}
EndStructure
Global *ram.Partage
MemoirePartagee=CreatefileMapping_($FFFFFFFF,#Null, #PAGE_READWRITE, 0, SizeOf(Partage),"EPB_RAM")
*ram=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
Declare envoie_epb(text.s,type)
Procedure envoie_epb(text.s,type) ; ici on envoie nos données
*ram\declencheur.b=1 ; un binaire qui va servir a declencher la reception dans le recepteur
*ram\valeur1.i=type ; un numero histoire de
*ram\message.s=text.s ; un petit message en text
EndProcedure
; *****************************************************************************
; cette procedure vous permettra d'envoyer des commandes au prg de reception
; utile si vous dévellopez un utilitaire, qui aurai besoin de poser un résultat dans EPB
; utilisation : envoie_epb("message",ORDRE)
; ****************** exemple d'utilisation **************************************
envoie_epb("un Petit Message",0) ; ORDRE 0, pose au curseur
; ; *******************************************************************
;envoie_epb("Remplace",1) ; ORDRE 1 , Remplace la ligne en cours (par rapport au curseur)
; ; *******************************************************************
;envoie_epb("un Petit Message",2) ; ORDRE 2 ,insert une ligne (par rapport au curseur)
; ; *******************************************************************
;Debug GetCurrentDirectory()
;envoie_epb("20",3) ; ORDRE 3 ,saute a la ligne 20
; ; *******************************************************************
;envoie_epb("10",4) ; ORDRE 4 ,positionne le curseur apres le 10eme caratere
; ; *******************************************************************
;envoie_epb("5,10",5) ; ORDRE 5 ,selectione apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours
; *******************************************************************
; exemple de selection et remplacement :
;envoie_epb("5,10",5) ; selectione apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours
;envoie_epb("message qui remplace",6) ; ORDRE 6 et remplace par le message
; ; *******************************************************************
; exemple de recuperation de la ligne en cours par le clipboard()
;envoie_epb("message bidon",7) ; ORDRE 7, Recupere la ligne en cours, retour par le clipboard
; Delay(200)
;Debug GetClipboardText()
; ; *******************************************************************
; exemple de creation d'un onglet et du chargement d'un code dedans :
;file$=OpenFileRequester("load pb",Home$,"*.pb",0)
;envoie_epb(file$ ,8) ; ORDRE 8, creer un onglet, et charger un fichier *.pb
; ; *******************************************************************
; exemple de recuperation du code complet de l'onglet précisé , dans le clipboard()
; envoie_epb("3",9) ; ORDRE 9 , Recupere le code complet de l'onglet précisé (ici l'onglet 3), retour par le clipboard
; *************************************************************************
; exemple d'activation des onglets , rien de plus
; envoie_epb("0",10) ; ORDRE 10 ,Active l'onglet précisé (ici l'onglet 1 ... les onglets commencent a 0), rien de plus...
; Delay(1000)
; envoie_epb("1",10) ; Active l'onglet précisé (ici l'onglet 2 ... les onglets commencent a 0), rien de plus...
; Delay(1000)
; envoie_epb("2",10) ; Active l'onglet précisé (ici l'onglet 3 ... les onglets commencent a 0), rien de plus...
; **************************************************************************
;
; EPb

Re: Partage d'information entre applications ?
Mort de rireDobro a écrit : pffff ! mon bon fond, me perdra

Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
http://golfy.olympe.in/Teo-Tea/