MÉMOIRE PARTG-AGÉE - ÉCHANGE DE DONNÉES ENTRE 2 PROCESSUS

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 11 juil. 2004 à 18:48
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 19 févr. 2008 à 12:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24455-memoire-partg-agee-echange-de-donnees-entre-2-processus

narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
19 févr. 2008 à 12:37
ça fonctionne mieux mais ceci pose probléme :
'UPGRADE_WARNING: Impossible de résoudre la propriété par défaut de l'objet FILE_MAP_ALL_ACCESS. Cliquez ici : 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
pProcess1 = MapViewOfFile(hFichier1m, FILE_MAP_ALL_ACCESS, 0, 0, 0)

Je ne comprend étant donné que FILE_MAP_ALL_ACCESS est une variable normal.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 févr. 2008 à 11:56
depend de ton appel
mais si tu colles un Integer, faut le passer ByVal
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
19 févr. 2008 à 10:54
as-t-il moyen d'avoir une version .Net ?

les appelles des API ne fonctionne pas avec "Any" que j'ai remplacé par Integer mais ça ne semble quand même pas marcher.

Merci d'avance
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 2
20 janv. 2005 à 12:59
Trop bien ton code, 12/10 ! Je l'intègre à une DLL qui scrute l'explorateur windows...

Question : comment peut on stocker en mémoire les données sans passer par le fichier .dat ?

Merci.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 juil. 2004 à 18:09
Oui d'accord, mais il n'était question que de variable texte à l'origine, alors des textes avec des Chr(0) ...
Dans le cas des Chaines contenant des choses bizarres, tu peux toujours mapper deux varaibles : la première donnerait la taille et la deuxième serait la variable elle-même.
cs_derick Messages postés 41 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 25 août 2007
13 juil. 2004 à 17:58
oui, c'est vrai cela fonctionne (j'ai aussi w2K) - mais y a un os : dans un fichier qcq, place en hexa un 00, si tu testes la fin sur 0, ou 01 sur tu testes sur vbNull : tu verras que tu sors de la boucle avant avoir lu l'ensemble du fichier. J'ai essayé de lire 'jusqu'au bout' (et au delà) pour essayer de trapper une erreur : hélas, w2k fait alors crasher le prog.
cs_Jack Messages postés 14006 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
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.
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 à 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.
cs_Jack Messages postés 14006 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
Rejoignez-nous