ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
26 sept. 2003 à 21:37
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 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 ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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)...