Mémoire partg-agée - échange de données entre 2 processus

Soyez le premier à donner votre avis sur cette source.

Vue 7 362 fois - Téléchargée 952 fois

Description

Une ébauche de source (sans zip) portant le même nom a été déposée par Mystik74 récemment. En reprenant les éléments proposés, voici un exemple complet. Utilisation de CreateFileMapping / MapViewofFile / OpenFileMapping / UnmapViewOfFile. Le vbg contient 2 projets. Le 1er projet créée le processus qui place des données en mémoire. Le 2ème projet créée un processus qui va lire le contenu de la mémoire. Derick.

Conclusion :


J'ai commencé à creuser le sujet - on en trouve (forcément) une trace dans MSDN. On en parle dans "Shared Memory Through Memory-Mapped Files", qui vient d'un bouquin (HardCore VB), et d'un exemple (sans le code complet). Dès que je l'ai reconstitué, je le placerais sur le site.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
11 juil. 2004 à 18:48
Salut Derick (le vrai ?)
Très intéressante cette source.
J'ai un peu appronfis pour améliorer :
Actuellement, tu passes une chaine de 64 caractères.
Si la chaine est de longueur quelconque, il faut faire les modifs suivantes :
-1- Dans le Serveur :
Dans la fonction CreateFileMapping, mettre "FileLen(filename)" à la place de 64 comme ça on fournit toute le contenu du fichier, quelque soit sa longueur.
-2- Dans le Client :
Dans le Command1_Click :
    Dim monStr As String, i As Integer, V2() As Byte
    Dim Trouvé As Boolean, Offset As Long
    
    ' On va les rechercher les caractères mappés
    
    ReDim V2(0 To 16)   ' Petite taille
    
    ' Pour remplir un array avec CopyMemory, on précise juste son 1er élément
    Trouvé = False
    monStr = ""
    
    Do While Not Trouvé
        ' On lit 16 caractères à partir de l'emplacement mémoire
        '   désigné par pProcess2 auquel on ajoute les décalages
        '   des lectures successives (Offset)
        CopyMemory V2(0), ByVal pProcess2 + Offset, 16
        Offset = Offset + 16
        For i = 0 To 15
            ' Si le caractère est vbNull (0), c'est la fin de la chaine
            If V2(i) = 0 Then
                Trouvé = True
                Exit For
            Else
            ' Sinon, on ajoute ces 16 caractères à notre résultat
                monStr = monStr & Chr(V2(i))
            End If
        Next
        DoEvents
    Loop
    MsgBox monStr, vbInformation, "Contenu de la mémoire partagée"


Vala
cs_derick Messages postés 41 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 25 août 2007
12 juil. 2004 à 11:17
Slt Jack !
Oui c'est Derick, mais tu divises l'âge du vrai par 2, ou presque !
Merci pour ta proposition, cela permet de généraliser le code - je vais mettre mon source à jour.
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
12 juil. 2004 à 17:59
bien cette source
cs_derick Messages postés 41 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 25 août 2007
12 juil. 2004 à 22:50
Jack,
La détection de fin de chaîne avec 0 ou avec vbNull ne fonctionne pas.
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 juil. 2004 à 16:56
C'est bizarre ça, ça marche bien chez moi (W2k) et là, ça ne dépend pas du langage, mais de la structure des données dans la mémoire .... bizarre

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.