Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UNE CLASSE POUR L'UTILISATION DE LA MÉMOIRE PARTAGÉE


Information sur la source

Catégorie :API-OLE Classé sous : mémoire, partagée, classe Niveau : Initié Date de création : 21/01/2005 Vu : 4 439

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

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

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

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


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.