Difference between revisions of "MemoryRecord.AssignToSystemMemory"
(→Примеры) |
m (1 revision imported) |
(No difference)
|
Latest revision as of 07:51, 7 February 2021
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);