Date de parution : 06/04/2002
- Cette fiche API a été lue 5117 fois
Description
GlobalAlloc alloue une série d'octets dans la mémoire globale de l'ordinateur. La fonction retourne une valeur en cas de succès, dépendant du sémaphore spécifié dans wFlags. Ce peut être un pointeur sur le bloc de mémoire alloué ou un handle sur celui-ci. Bien que les deux identifient la même chose, ils ne sont cependant pas identiques et ne peuvent être interchangés. Une valeur à NULL sera retournée en cas d'échec.
Un ou une combinaison des sémaphores précisant comment on alloue le bloc de mémoire :
GHND = 0x40
Idem qu'en combinant GMEM_MOVEABLE avec GMEM_ZEROINIT.
GMEM_DDESHARE = 0x2000
Optimise la mémoire allouée pour utilisation avec le dialogue DDE.
GMEM_DISCARDABLE = 0x100
Alloue de la mémoire changeable (ne peut être combiné avec GMEM_FIXED.)
GMEM_FIXED = 0x0
Alloue de la mémoire fixe (ne peut être combiné avec GMEM_DISCARDABLE ou GMEM_MOVEABLE.)
GMEM_MOVEABLE = 0x2
Alloue de la mémoire déplacable (Combinaison impossible avec GMEM_FIXED.)
GMEM_NOCOMPACT = 0x10
Ne compacte pas la mémoire.
GMEM_NODISCARD = 0x20
Ne se débarrasse pas de la mémoire changeable.
GMEM_SHARE = 0x2000
Identique à GMEM_DDESHARE.
GMEM_ZEROINIT = 0x40
Initialise le contenu du bloc mémoire à 0.
GPTR = 0x42
Idem qu'en combinant GMEM_FIXED avec GMEM_ZEROINIT.
dwBytes
Nombre d'octets à allouer, e.g. la taille du bloc mémoire à allouer.
Compatibilité
Win 32s, Win 95/98, Win NT, Win2K, WinXP
Remarque
Noter que Windows allouera un bloc mémoire en base adresse 0.
Exemple 1
// Allocation de mémoire pour le transfert de variables
source, cible sont des tableaux de 256 entiers
c est un entier
retVal est un booléen
hMem, pMem sont des entiers longs
// init données du tableau source
Pour c = 1 à 256
// chaque élément égale au double de son index
source[c] = 2 * c
Fin
// Alloue un bloc mémoire déplacable (retourne un handle)
// Le type entier est sur 2 octets
// avec GMEM_MOVEABLE ou GMEM_ZEROINIT
hMem = AppelDLL32("kernel32", "GlobalAlloc", 0x2 + 0x40, 256 * 2)
// vérouille le bloc mémoire et retourne un pointeur
pMem = AppelDLL32("kernel32", "GlobalLock", hMem)
// Copie de source vers cible en passant par la mémoire
AppelDLL32("kernel32", "RtlMoveMemory", &pMem, &source, 256 * 2)
// Ce code vous est offert par Beaussier en ligne...
AppelDLL32("kernel32", "RtlMoveMemory", &cible, &pMem, 256 * 2)
// Dévérouille et libère le bloc mémoire
AppelDLL32("kernel32", "GlobalUnlock", hMem)
AppelDLL32("kernel32", "GlobalFree", hMem)
// Vérification du résultat
retVal = Vrai
Pour c = 1 à 256
Si source[c] <> cible[c] Alors retVal = Faux
Fin
Si retVal Alors Info("La copie est correcte")