Функция GlobalAlloc

Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long

GlobalAlloc выделяет глобальный блок памяти. Функции работы с глобальной памятью достаточно медленные, но по-прежнему используются с функциями буфера обмена, OLE и др.

Возвращаемое значение

В успешном случае возвращается дескриптор глобального блока памяти. В случае ошибки возвращается 0 (используйте GetLastError для получения кода ошибки)

Параметры

wFlags
Комбинация флагов, определяющих тип выделяемой памяти:
GHND = &H40Комбинация флагов GMEM_MOVEABLE и GMEM_ZEROINIT
GMEM_FIXED = &H0Выделяется фиксированный блок памяти
GMEM_MOVEABLE = &H2Выделяется перемещаемый блок памяти
GMEM_ZEROINIT = &H40Выделенный блок памяти инициализируется нулями
GPTR = &H42Комбинация флагов GMEM_FIXED и GMEM_ZEROINIT
dwBytes
Количество выделяемых байт (размер блока памяти)

Пример

' Используем блок памяти для копирования
' содержимого массива s() в массив t()

Dim s(0 To 255) As Integer, t(0 To 255) As Integer
Dim c As Integer ' счетчик
Dim retval As Long
Dim hMem As Long, pMem As Long  ' дескриптор и указатель на блок памяти

' Инициализируем массив s()
For c = 0 To 255
  s(c) = 2 * c
Next c

' Выделяем перемещаемый блок памяти
hMem = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, 256 * 2)
' Фиксируем блок памяти, возвращая его указатель
pMem = GlobalLock(hMem)
' Копируем содержимое массива s() в блок памяти
CopyMemory ByVal pMem, s(0), 256 * 2
' Копируем содержимое блока памяти в массив t()
CopyMemory t(0), ByVal pMem, 256 * 2
' Отменяем фиксацию блока памяти и освобождаем ресурсы
retval = GlobalUnlock(hMem)

retval = GlobalFree(hMem)

' Сравним два массива
For c = 0 To 255
  If s(c) <> t(c) Then Debug.Print "Ошибка при копировании"
End If

Смотри также

GlobalFree, GlobalLock

Категория

Память