Prb de VirtualFreeEx sous XP

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 26 sept. 2003 à 21:37
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 16 oct. 2003 à 13:40
salut

dans mon programme :
http://www.vbfrance.com/code.aspx?ID=8349
VirtualFreeEx est censé libérer la mémoire allouée par VirtualAllocEx... mais cette focntion me renvoie 0 et ne libère pas la mémoire comme prévu...

le code est le suivant :

'alloue de la mémoire dans le processus explorer.exe
Private Sub AllocMem()
Dim PID As Long

'renvoie le PID correspondand à la fenetre du bureau
Call GetWindowThreadProcessId(hW, PID)
'récupère le handle de explorer.exe
AllocMemory = OpenProcess(PROCESS_ALL_ACCESS, 0&, PID) 'aProcesses(i))
'alloue de la mémoire dans explorer.exe
'pour un buffer chaine de caracteres
R_buf = VirtualAllocEx(ByVal AllocMemory, ByVal 0&, MAX_PATH, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
'pour un buffer POINTAPI
R_pt = VirtualAllocEx(ByVal AllocMemory, ByVal 0&, LenB(L_pt), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
'pour un buffer LVITEM
R_lvi = VirtualAllocEx(ByVal AllocMemory, ByVal 0&, LenB(L_lvi), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
'pour un buffer LVFINDITEM
R_FI = VirtualAllocEx(ByVal AllocMemory, ByVal 0&, LenB(L_FI), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
End Sub

Private Sub UnAllocMem()
Dim a As Long
'libère la mémoire allouée
Call VirtualFreeEx(AllocMemory, R_buf, 0&, MEM_RELEASE)
Call VirtualFreeEx(AllocMemory, R_pt, 0, MEM_RELEASE)
Call VirtualFreeEx(AllocMemory, R_lvi, 0, MEM_RELEASE)
Call VirtualFreeEx(AllocMemory, R_FI, 0, MEM_RELEASE)
'ferme le handle de explorer.exe
CloseHandle AllocMemory
End Sub

Private hW As Long, L_lvi As LVITEM, PID As Long
Private P As Long, L_pt As POINTAPI, R_buf As Long, R_pt As Long, R_lvi As Long
Dim R_FI As Long, L_FI As LVFINDINFO
Private L_buf As String, Actual As Long, AllocMemory As Long, hWIML As Long

pour info le pid est celui de explorer.exe...

donc ma question est simple :) : est-ce que quekqu'un sait comment utiliser VirtualFreeEx avec VB pour avoir le fonctionnement attendu ?

ShareVB

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 sept. 2003 à 17:03
J'aimerais que tu testes si AllocMemory est bien <> 0, j'ai refait le prog (en C) sur ton modele et comme je m'y attendais le systeme dit "Acces refuse".
BruNews, ciao...
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 sept. 2003 à 18:57
salut

oui AllocMemory est bien different de 0 (car sinon le prog fonctionnerait pas)
là, la mémoire est bien allouée mais ne veut pas etre libérée...

je commence à penser que ce n'est pas VirtualFreeEx qui ne fonctionne pas mais VirtualAllocEx qui crée une zone mémoire non libérable...

ShareVB
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
12 oct. 2003 à 11:48
salut

le bug venait de la :
private const MEM_RELEASE = &h8000& 'il manquait le & final

la solution etait pourtant simple et fallait y penser :
pour ce ^$ùù$^$ de VB qui travaille avec les entiers signés &h8000 = -32767 et non 32768
alors que &h8000& = 32768
ce qui fait que virtualfreeex renvoie 0 car MEM_RELEASE n'etait pas égal à 32768 (8000h) mais à -32767 (FFFF8001h complement à 2)

a la la sacré VB...

le prb c que suite à une mise à jour ma source n'est plus disponible (il y a un message d'erreur a la place)...

voila

ShareVB
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
16 oct. 2003 à 13:40
salut

le zip corrigé est disponible à :
http://perso.wanadoo.fr/sharevb/Bureau.zip

car il n'est pas disponible sur le VBFrance pour le moment suite à un prb

voila

ShareVB
0
Rejoignez-nous