Описание функции


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()