Buffer.CopyFromSystemMemory

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
  CopyFromSystemMemory (Работа с системными адресами)
Объект:Буфер
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, системная ошибка.
Визуальность:Нет

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

Синтаксис

Buffer.CopyFromSystemMemory(<Указатель в системной памяти (INT)>,<Размер данных в байтах (INT)>,<Индекс назначения копирования (INT)>)

Аргументы

  • <Указатель в системной памяти (INT)> - Указатель адреса в системной памяти из которого будет происходить копирование.
  • <Размер данных в байтах (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(вСтр);