Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
GlobalAlloc выделяет глобальный блок памяти. Функции работы с глобальной памятью достаточно медленные, но по-прежнему используются с функциями буфера обмена, OLE и др.
В успешном случае возвращается дескриптор глобального блока памяти. В случае ошибки возвращается 0 (используйте GetLastError для получения кода ошибки)
GHND = &H40 | Комбинация флагов GMEM_MOVEABLE и GMEM_ZEROINIT |
GMEM_FIXED = &H0 | Выделяется фиксированный блок памяти |
GMEM_MOVEABLE = &H2 | Выделяется перемещаемый блок памяти |
GMEM_ZEROINIT = &H40 | Выделенный блок памяти инициализируется нулями |
GPTR = &H42 | Комбинация флагов GMEM_FIXED и GMEM_ZEROINIT |
' Используем блок памяти для копирования ' содержимого массива 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