Следующий пример конвертирует указатель в Cardinal, увеличиваем значение адреса, и конвертирует обратно в указатель, который и возвращает.
Внимание, функция не выделяет никаких блоков памяти, она просто работает с указателем.
Code: |
Зависимости: System Автор: Григорий Ситнин, gregor gregor.ru, Москва Copyright: Григорий Ситнин, 2003 Дата: 8 июля 2003 г. ***************************************************** }
function IncPtr(APointer: pointer; AHowMuch: cardinal = 1): pointer; begin //*** Конвертируем указатель в Cardinal, увеличиваем значение адреса, //*** и конвертируем обратно в указатель, который и возвращаем. //**! Внимание, функция не выделяет никаких блоков памяти, //**! она просто работает с указателем. Result := Ptr(cardinal(APointer) + AHowMuch); end; Пример использования:
{$APPTYPE CONSOLE} program testptr; uses SysUtils, uIncPtr; //*** Модуль uIncPtr содержит функцию IncPtr var ptr1, ptr2: pointer; begin ptr1 := AllocMem(255); ptr2 := incptr(ptr1, 10); writeln('ptr1 : ', cardinal(ptr1)); //*** Напечатать увеличенный на 10 указатель ptr1 writeln('ptr2 (+10): ', cardinal(ptr2)); FreeMem(ptr1, 255) end. |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!