Описание функции
GetMemory
Возвращает указатель буфера памяти переменной
GetMemory(SymbolName.s, [*AllocatedMemory=#Null, AllocatedSize.i=#PB_Ignore])
Параметры
SymbolName.s | Имя переменной в виде строки из символов |
*AllocatedMemory |
Указатель на участок памяти, в который будут записаны данные переменой SymbolName.s Если не указано, то автоматически выделяется нужный размер (с помощью AllocateMemory()) и возвращается указатель на данные, а AllocatedSize.i игнорируется. Если указана память, то обязательно должен указан её размер, при этом если он меньше необходимого, то копируется только то что поместится. |
AllocatedSize.i |
Размер участка памяти *AllocatedMemory, чтобы предотвратить переполнение. По умолчанию #PB_Ignore - длина не определена, используется с *AllocatedMemory=#Null. |
Возвращаемое значение
Возвращает указатель на буфер памяти, выделенного PureBasic`ом, в котором будут находится данные.Примечания
Требуется использовать FreeMemory(), чтобы освободить память, если она выделена автоматически.Пример
; STARGATE
; https://www.purebasic.fr/english/viewtopic.php?t=76279
XIncludeFile "../Library/Lizard.pbi"
; Lizard всегда должен быть инициализирован до выполнения каких либо операций с ним.
If Lizard::Initialize("../Library") ; Укаэите путь к папке с Lizard.dll.
Debug "Lizard был инициализирован. Версия " + Lizard::Version()
Else
Debug "Не удалось выполнить инициализацию Lizard"
End
EndIf
; Перенос списка Lizard в массив Pure Basic
Lizard::Evaluate("list = {1.2, 3.45, 6.789, 0.1234, 5.67890}") ; Присваивает переменной списка "list" некоторые значения.
Debug "Список Lizard: " + Lizard::Evaluate("list") ; Теперь переменная "list" содержит реальные значения.
Lizard::Evaluate(~"buffer = Apply(Join, ToString(#, BinaryFormat->\"float64\") &/@ list )") ; Преобразует значения в бинарные строки и соединяет их вместе. Обратите внимание, что здесь используется формат float64 (double).
Debug "Участок памяти: " + Lizard::Evaluate("buffer") ; Теперь "buffer" содержит бинарную строку всех значений в формате double.
Define Dim Doubles.d(4) ; Создание некоего массива. Обратите внимание, что используется тип double (64 бита, 8 байт)!
Lizard::GetMemory("buffer", @Doubles()) ; Заполняет буфер памяти массива содержимым переменной "buffer"
Debug "Doubles(0) = " + Doubles(0)
Debug "Doubles(1) = " + Doubles(1)
Debug "Doubles(2) = " + Doubles(2)
Debug "Doubles(3) = " + Doubles(3)
Debug "Doubles(4) = " + Doubles(4)
; Завершение Lizard.
Lizard::Terminate()