S'identifier

API
Documentation
Ressources
Trucs & astuces
Libre
Gabarits
Services

Membres
Participer
Visiter

Contact

Meilleure résolution
mode 800 x 600

Optimisé pour
IE v.5
Netscape v.6
mais surtout pour
Mozilla v.1
minimum

 


Membre de Click-FR®, Réseau francophone Paie-Par-Click

GlobalAlloc

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.

Syntaxe

AppelDLL32("kernel32", "GlobalAlloc", wFlags, dwBytes)

wFlags
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")


Nombre de commentaire sur GlobalAlloc : 0

Rappel : Le code fourni est compatible Windev v.4 et 5. Pour les versions supérieures, vous devez modifier le type des variables numériques. Par exemple : entier long devient entier.
Bien sûr, les marques citées sont déposées par leurs sociétés respectives. Ces pages sont à la disposition de tous, le code fourni est libre mais toute responsabilité est déclinée en cas de mauvais usage ou de dysfonctionnement.
© 2000-2005 Beaussier & Le Centre W..D..