Buffer.SystemAddress

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

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

Синтаксис

Buffer.SystemAddress(<Индекс в буфере (INT)>=0):<Указатель в системной памяти (INT)>

Аргументы

  • <Индекс в буфере (INT)> - (необязательный аргумент) Индекс байта в буфере, адрес которого необходимо найти. По умолчанию совпадает с началом буфера.

Возвращаемое значение

Возвращается целое число.

Примеры

//Пример показывает работу функций адресации системной памяти

//Подготовка буфера, запись двух строк
аСтр:="Строка ";
бСтр:="проверки";
аБуф:=Buffer.Create();
аБуф.SetStringW(0,аСтр);
аБуф.SetStringW(Length(аСтр)*2,бСтр);

//Получение системного адреса буфера на начало второй строки
аАдр:=аБуф.SystemAddress(Length(аСтр)*2);

//Подготовка второго буфера
бБуф:=Buffer.Create();
бБуф.Fill(0,100,0);

//Получение информации из системной памяти (в данном случае, адрес указывает на первый буфер)
бБуф.CopyFromSystemMemory(аАдр,Length(бСтр)*2);
вСтр:=бБуф.GetStringW(0,Length(бСтр));

//Будет выведено "проверки"
Message(вСтр);