Описание функции
SetMemory
Задаёт переменную с указателем на участок памяти
SetMemory(SymbolName.s, *Memory, MemorySize.i=#PB_Default)
Параметры
SymbolName.s | Имя переменной в виде строки из символов |
*Memory |
Указатель на участок памяти, содержимое которого будет назначено для переменной SymbolName.s |
MemorySize.i |
Размер участка памяти *Memory. #PB_Default - длина будет определена с помощью MemorySize() |
Примечания
Содержимое переменной является (двоичным) строковым объектом.Пример
; 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
; Перенос массива Pure Basic в список Lizard
Define Dim Numbers.l(3) ; Создание некоего массива. Обратите внимание, что используется тип long (32 бита, 4 байта)!
Numbers(0) = 1
Numbers(1) = 23
Numbers(2) = 456
Numbers(3) = 7890
Debug ""
Lizard::SetMemory("buffer", @Numbers(), SizeOf(Long) * (ArraySize(Numbers()) + 1)) ; Задаёт переменную "buffer" с содержимым массива в памяти
Debug "Участок памяти: " + Lizard::Evaluate("buffer") ; "buffer" теперь содержит бинарную строку.
Lizard::Evaluate(~"list = ToInteger(#, BinaryFormat->\"int32\") &/@ Partition(buffer, 4)") ; Разделите буфер и преобразуйте бинарные строки в числа. Обратите внимание, что формат здесь int32 (long).
Debug "Список Lizard: " + Lizard::Evaluate("list") ; "list" теперь содержит список чисел массива PureBasic.
; Завершение Lizard.
Lizard::Terminate()