MemoryRecord.AssignToSystemMemory
| 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);