Accueil > > > UNE CLASSE POUR L'UTILISATION DE LA MÉMOIRE PARTAGÉE
UNE CLASSE POUR L'UTILISATION DE LA MÉMOIRE PARTAGÉE
Information sur la source
Description
Permet de définir par un nom une zone mémoire qui pourra être ensuite partagée entre plusieurs applications.
Source
- *!* Objet : Utilisation de la mémoire partagée pour la communication entre applications
- *!* Auteur : C.Chenavier
- *!* Version : 1.00 - 20/01/2005
- *!*
- *!* Exemple d'utilisation :
- *!*
- *!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage")
- *!* oSharedMem.Write("ceci est la chaîne à transférer")
- *!*
- *!* Application 2 :
- *!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage")
- *!* MessageBox(oSharedMem.Read())
- *!*
- *!* Note : par défaut le buffer est de 4Ko.
- *!* Pour le passer par exemple à 32K faire :
- *!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage", 32*1024)
-
- #DEFINE INVALID_HANDLE_VALUE -1
- #DEFINE PAGE_READWRITE 0x04
-
- #DEFINE SECTION_QUERY 0x0001
- #DEFINE SECTION_MAP_WRITE 0x0002
- #DEFINE SECTION_MAP_READ 0x0004
- #DEFINE SECTION_MAP_EXECUTE 0x0008
- #DEFINE SECTION_EXTEND_SIZE 0x0010
-
- #DEFINE STANDARD_RIGHTS_REQUIRED 0x000F0000
-
- #DEFINE SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED+SECTION_QUERY+;
- SECTION_MAP_WRITE + ;
- SECTION_MAP_READ + ;
- SECTION_MAP_EXECUTE + ;
- SECTION_EXTEND_SIZE)
-
- DEFINE CLASS SharedMemory AS CUSTOM
-
- hMapFile = 0
- cSharedName = ''
-
- HIDDEN Buf_Size
- Buf_Size = 4*1024
-
-
- PROCEDURE Init
- LPARAMETERS cSharedName, nSize
-
- LOCAL nLibs
- LOCAL ARRAY aLibs(1,3)
-
- THIS.Name = SYS(2015)
-
- THIS.cSharedName = IIF(EMPTY(M.cSharedName), '', M.cSharedName)
-
- M.nLibs = ADLLS(aLibs)
- IF ASCAN(aLibs,"CreateFileMapping",1,0,1,7)=0
- DECLARE INTEGER CreateFileMapping IN kernel32 ;
- INTEGER hFile, ;
- INTEGER lpAttributes, ;
- INTEGER flProtect, ;
- LONG dwMaximumSizeHi, ;
- LONG dwMaximumSizeLo, ;
- STRING lpName
-
- DECLARE INTEGER OpenFileMapping IN kernel32 ;
- INTEGER flProtect, ;
- INTEGER wInherit, ;
- STRING lpName
-
- DECLARE LONG MapViewOfFile IN kernel32 ;
- INTEGER hFileMappingObject, ;
- INTEGER dwDesiredAccess, ;
- LONG dwFileOffsetHi, ;
- LONG dwFileOffsetLo, ;
- LONG dwNumberOfBytesToMap
-
- DECLARE INTEGER UnmapViewOfFile IN kernel32;
- LONG lpBaseAddress
- ENDIF
- IF ASCAN(aLibs,"CloseHandle",1,0,1,7)=0
- DECLARE INTEGER CloseHandle IN kernel32;
- INTEGER hObject
- ENDIF
- IF NOT THIS.Open()
- THIS.New(M.nSize)
- ENDIF
- ENDPROC
-
-
- FUNCTION New
- LPARAMETERS nSize
-
- IF NOT EMPTY(M.nSize)
- THIS.Buf_Size = M.nSize
- ENDIF
-
- THIS.hMapFile = CreateFileMapping( ;
- INVALID_HANDLE_VALUE, ;
- 0, ;
- PAGE_READWRITE, ;
- 0, ;
- THIS.Buf_Size, ;
- THIS.cSharedName)
-
- RETURN (THIS.hMapFile > 0)
-
- ENDPROC
-
-
-
- FUNCTION Open
- THIS.hMapFile = OpenFileMapping( ;
- SECTION_ALL_ACCESS, ;
- 0, ;
- THIS.cSharedName)
-
- RETURN (THIS.hMapFile > 0)
-
- ENDPROC
-
-
-
- FUNCTION Read
-
- LOCAL pBuf, cString
-
- M.cString = ''
- IF THIS.hMapFile > 0
- pBuf = MapViewOfFile(THIS.hMapFile, ;
- SECTION_ALL_ACCESS, ;
- 0, 0, THIS.Buf_Size)
- IF pBuf > 0
- M.cString = SYS(2600, pBuf, THIS.Buf_Size)
- UnmapViewOfFile(pBuf)
- ENDIF
- ENDIF
-
- RETURN M.cString
- ENDPROC
-
-
-
- FUNCTION Write
-
- LPARAMETERS cString
-
- LOCAL nStringLen, pBuf, lOK
-
- IF THIS.hMapFile > 0
- M.cString = M.cString + CHR(0)
- M.nStringLen = MIN(LEN(M.cString), THIS.Buf_Size)
- pBuf = MapViewOfFile(THIS.hMapFile, ;
- SECTION_ALL_ACCESS, ;
- 0, 0, THIS.Buf_Size)
- IF pBuf > 0
- SYS(2600, pBuf, M.nStringLen, M.cString)
- UnmapViewOfFile(pBuf)
- M.lOK = .T.
- ENDIF
- ENDIF
-
- RETURN M.lOK
- ENDPROC
-
-
-
- PROCEDURE Destroy
-
- IF THIS.hMapFile > 0
- CloseHandle(THIS.hMapFile)
- ENDIF
-
- ENDPROC
-
- ENDDEFINE
*!* Objet : Utilisation de la mémoire partagée pour la communication entre applications
*!* Auteur : C.Chenavier
*!* Version : 1.00 - 20/01/2005
*!*
*!* Exemple d'utilisation :
*!*
*!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage")
*!* oSharedMem.Write("ceci est la chaîne à transférer")
*!*
*!* Application 2 :
*!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage")
*!* MessageBox(oSharedMem.Read())
*!*
*!* Note : par défaut le buffer est de 4Ko.
*!* Pour le passer par exemple à 32K faire :
*!* oSharedMem = CREATEOBJECT("SharedMemory", "Nom_de_partage", 32*1024)
#DEFINE INVALID_HANDLE_VALUE -1
#DEFINE PAGE_READWRITE 0x04
#DEFINE SECTION_QUERY 0x0001
#DEFINE SECTION_MAP_WRITE 0x0002
#DEFINE SECTION_MAP_READ 0x0004
#DEFINE SECTION_MAP_EXECUTE 0x0008
#DEFINE SECTION_EXTEND_SIZE 0x0010
#DEFINE STANDARD_RIGHTS_REQUIRED 0x000F0000
#DEFINE SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED+SECTION_QUERY+;
SECTION_MAP_WRITE + ;
SECTION_MAP_READ + ;
SECTION_MAP_EXECUTE + ;
SECTION_EXTEND_SIZE)
DEFINE CLASS SharedMemory AS CUSTOM
hMapFile = 0
cSharedName = ''
HIDDEN Buf_Size
Buf_Size = 4*1024
PROCEDURE Init
LPARAMETERS cSharedName, nSize
LOCAL nLibs
LOCAL ARRAY aLibs(1,3)
THIS.Name = SYS(2015)
THIS.cSharedName = IIF(EMPTY(M.cSharedName), '', M.cSharedName)
M.nLibs = ADLLS(aLibs)
IF ASCAN(aLibs,"CreateFileMapping",1,0,1,7)=0
DECLARE INTEGER CreateFileMapping IN kernel32 ;
INTEGER hFile, ;
INTEGER lpAttributes, ;
INTEGER flProtect, ;
LONG dwMaximumSizeHi, ;
LONG dwMaximumSizeLo, ;
STRING lpName
DECLARE INTEGER OpenFileMapping IN kernel32 ;
INTEGER flProtect, ;
INTEGER wInherit, ;
STRING lpName
DECLARE LONG MapViewOfFile IN kernel32 ;
INTEGER hFileMappingObject, ;
INTEGER dwDesiredAccess, ;
LONG dwFileOffsetHi, ;
LONG dwFileOffsetLo, ;
LONG dwNumberOfBytesToMap
DECLARE INTEGER UnmapViewOfFile IN kernel32;
LONG lpBaseAddress
ENDIF
IF ASCAN(aLibs,"CloseHandle",1,0,1,7)=0
DECLARE INTEGER CloseHandle IN kernel32;
INTEGER hObject
ENDIF
IF NOT THIS.Open()
THIS.New(M.nSize)
ENDIF
ENDPROC
FUNCTION New
LPARAMETERS nSize
IF NOT EMPTY(M.nSize)
THIS.Buf_Size = M.nSize
ENDIF
THIS.hMapFile = CreateFileMapping( ;
INVALID_HANDLE_VALUE, ;
0, ;
PAGE_READWRITE, ;
0, ;
THIS.Buf_Size, ;
THIS.cSharedName)
RETURN (THIS.hMapFile > 0)
ENDPROC
FUNCTION Open
THIS.hMapFile = OpenFileMapping( ;
SECTION_ALL_ACCESS, ;
0, ;
THIS.cSharedName)
RETURN (THIS.hMapFile > 0)
ENDPROC
FUNCTION Read
LOCAL pBuf, cString
M.cString = ''
IF THIS.hMapFile > 0
pBuf = MapViewOfFile(THIS.hMapFile, ;
SECTION_ALL_ACCESS, ;
0, 0, THIS.Buf_Size)
IF pBuf > 0
M.cString = SYS(2600, pBuf, THIS.Buf_Size)
UnmapViewOfFile(pBuf)
ENDIF
ENDIF
RETURN M.cString
ENDPROC
FUNCTION Write
LPARAMETERS cString
LOCAL nStringLen, pBuf, lOK
IF THIS.hMapFile > 0
M.cString = M.cString + CHR(0)
M.nStringLen = MIN(LEN(M.cString), THIS.Buf_Size)
pBuf = MapViewOfFile(THIS.hMapFile, ;
SECTION_ALL_ACCESS, ;
0, 0, THIS.Buf_Size)
IF pBuf > 0
SYS(2600, pBuf, M.nStringLen, M.cString)
UnmapViewOfFile(pBuf)
M.lOK = .T.
ENDIF
ENDIF
RETURN M.lOK
ENDPROC
PROCEDURE Destroy
IF THIS.hMapFile > 0
CloseHandle(THIS.hMapFile)
ENDIF
ENDPROC
ENDDEFINE
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
mémoire tampon [ par jee0404 ]
bonjour, Je voudrais pouvoir stoker des informations programmaticilement dans la mémoire tampon. C'est comme si je ferais CTRL+C . Est-ce poss
code compléte d'une classe [ par jee0404 ]
bonjour, Je me demande si quelqu'un connaiterai le moyen de voir le code complet d'une classe qui est utiliser par défaut ? peut-on le voir ?
surcharge class et méthode [ par gregorian ]
Bonjour, J'aurais voulu savoir si il était possible de surcharger une classe et une méthode en visual fox proExemple: En vb.net, on peut écrire le con
Message d'erreur mémoire insuffisante sous Foxpro 8.0 [ par sebfox69 ]
Bonjour,J'ai developpé une application sous Visual Foxpro 8.0 et j'ai un problème lié à la mémoire .A l'intérieur de mes programmes, j'ai des requêtes
Mémoire insuffisante [ par pierreprj ]
Bonjour,L'un d'entre vous aura peut être la solution à mon problème :Je suis en vfp6quand je demande de genérer éxécutable j'obtiens une fenêtre avec
Classe Webview [ par ATLANTISM ]
Bonjour à tous, j'ai un soucis avec la classe VFP webview ( webbrowser ). Cette classe permets d'afficher une page HTML dans un formulaire VFP. L'im
|
Derniers Blogs
TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|