begin process at 2010 02 09 17:06:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API-OLE

 > 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

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : c_chenavier

Ecrire un message privé
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



 Sources du même auteur

DÉMARRAGE D'UNE MACHINE À DISTANCE
Source avec Zip Source avec une capture METTRE UN OBJET FOX PAR DESSUS UN ACTIVEX
Source avec Zip IMPLÉMENTION EN VISUALFOXPRO DE L'ALGORITHME DE HACHAGE SHA1

 Sources de la même categorie

AUTOMATION DE WORD AVEC VFP par AbaqueInside
LISTER LES ADRESSES IP DE LA MACHINE par FrancisFaure
OUVRIR UN DOCUMENT WORD PAR AUTOMATION ET FAIRE UNE FUSION A... par leissler
[VFP]CLASSE SYSTEMTIME par FredArmoni
Source avec Zip SPLASHSCREEN TYPE ALERTE D'OUTLOOK2003 par FredArmoni

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 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,432 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales