Difference between revisions of "Buffer.CopyToSystemMemory"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(No difference)

Latest revision as of 08:43, 7 February 2021

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

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

Синтаксис

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

Аргументы

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

Примеры

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

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

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

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

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

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