Difference between revisions of "Buffer.CopyToSystemMemory"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07: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(вСтр);