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
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice CRéATION D'UNE BASE DE DONNéE SOUS SQL AZURECRéATION D'UNE BASE DE DONNéE SOUS SQL AZURE par junarnoalg
Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.
SQL Azure est avant tout un service d'hébergement de base de données relationnelles construit sur SQL Server. Il permet aux entreprises d...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|