MemoryRecord.AssignToSystemMemory

From SunFlurry wiki
Revision as of 08:51, 7 February 2021 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  AssignToSystemMemory (Работа с записями)
Объект:Запись
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число.
Визуальность:Нет

Функция отвязывает запись от текущей привязки, и привязывает ее к заданному в аргументе системному указателю. Внимание: запись, привязанная к системной памяти, работает с прямыми адресами системной памяти, что может вызвать системное исключение доступа, если адрес недоступен или память не выделена. При записи в поля неверно привязанной записи, можно получить системное исключение и внезапное завершение работы клиента. Данную функцию нужно использовать с осторожностью.

Синтаксис

MemoryRecord.AssignToSystemMemory(<Системный указатель (INT)>)

Аргументы

  • <Системный указатель (INT)> - Указатель в системной памяти, к которому осуществляется привязка. Указатель не может быть равен нулю.

Примеры

//Заполнение буфера
aBuf:=Buffer.Create(4096);
aBuf.Fill(0,4096,0);
//Байт с позицией 3 равен 132.
aBuf[3]:=132;
//Адрес буфера в системной памяти
aMem:=aBuf.SystemAddress();

//Создание записи
rRec:=MemoryRecord.Create("Value:A6:UI8");
//Создание второй записи с ссылкой на первую
rRec2:=MemoryRecord.Create("V1:UI32,Value:^@rRec");
//Выделение памяти под запись
bBuf:=rRec2.Allocate();
//Запись адреса памяти в начало записи (работает как для x86, так и для x64)
If PointerSize()=4 Then
  bBuf.SetDWord(4,aMem);
Else
  bBuf.SetQWord(4,aMem);
EndIf;

//Системный указатель на элемент массива rRec2.Value.Value[3]
aMem:=rRec2.Value.SystemAddress("Value",3);
rRec3:=MemoryRecord.Create("data:UI8");
rRec3.AssignToSystemMemory(aMem);

//Будет выведено число 132
Message(rRec3.data);