Для работы со строками типа PChar

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

Все функции находятся в модуле SysUtils.

 

Таблица 3.10. Функции для работы со строками типа PChar

Функция Описание
Создание и уничтожение строк
function StrAlloc(Size: Cardinal): PChar;     function StrNew(const Str: PChar): PChar;     procedure StrDispose(Str: PChar);     function StrBufSize(const Str: PChar):   Резервирует буфер для строки с нулевым символом в конце в куче памяти и возвращает указатель на первый символ. После использования вызывайте функцию StrDispose(). Размещает копию строки Str в куче памяти и возвращает указатель на нее. Размер в памяти равен StrLen(Str) + 5 байт. После использования вызывайте функцию StrDispose(). Уничтожает строку, созданную StrAlloc() или StrNew().   Возвращает максимальное количество символов, которое может быть сохранено в буфере, зарезервированном функциями StrAlloc() или StrNew().
Объединение и копирование строк
function StrCat(Dest: PChar; const Source: PChar): PChar;   function StrLCat(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar;     function StrCopy(Dest: PChar; const Source: PChar): PChar;     function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar;     function StrECopy(Dest: PChar; const Source: PChar): PChar;   function StrPCopy(Dest: PChar; const Source: string): PChar;   function StrPLCopy(Dest: PChar; const Source: string; MaxLen: Cardinal): PChar;     function StrMove(Dest: PChar; const Source: PChar; Count: Cardinal): PChar; Объединяет две строки, дописывая Source в конец Dest. Возвращает указатель на строку Dest. Размер буфера должен быть не менее StrLen(Dest) + StrLen(Source) + 1 символов. Так же, как и StrCat, объединяет две строки, дописывая Source в конец Dest, но с учетом максимальной длины MaxLen результирующей строки. Другими словами, копирует не более MaxLen – StrLen(Dest) символов из строки Source. Копирует строку Source в Dest и возвращает указатель на Dest. Размер буфера должен быть не менее StrLen(Source) + 1 символов. Так же, как и StrCopy(), копирует строку Source в Dest и возвращает указатель на Dest, но с проверкой максимально доступного размера. Копирует строку Source в Dest и возвращает указатель на последний нулевой символ. Размер буфера должен быть не менее StrLen(Source) + 1 символов. Копирует строку Pascal в строку Dest, заканчивающуюся нулем. Возвращает указатель на строку Dest. Размер буфера должен быть не менее Length(Source) + 1 символов. Копирует MaxLen символов из строки Pascal в строку Dest, заканчивающуюся нулем. Возвращает указатель на строку Dest. Копирует Count символов из строки Source в строку Dest. Возвращает указатель на строку Dest.
Форматирование строк
function StrLower(Str: PChar): PChar; function StrUpper(Str: PChar): PChar; function StrFmt(Buffer, Format: PChar; const Args: array of const): PChar;     function StrLFmt(Buffer: PChar; MaxLen: Cardinal; Format: PChar; const Args: array of const): PChar; function FormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const): Cardinal; Преобразует строку к нижнему регистру. Преобразует строку к верхнему регистру. Форматирование одного или нескольких значений массива Args в буфере Buffer осуществляется в соответствии с параметром Format. То же, что и StrFmt, но длина результата форматирования ограничивается значением MaxLen Форматирует группу аргументов из массива Args. Результат помещается в Buffer (размер BufLen). Место вставки аргументов и их форматирование определяются в строке Format. Функция возвращает количество символов, помещенных в Buffer.
Сравнение строк
function StrComp(const Str1, Str2 : PChar): Integer;   function StrIComp(const Str1, Str2:PChar): Integer; function StrLComp(const Str1, Str2: PChar; MaxLen: Cardinal): Integer;     function StrLIComp(const Str1 Str2: PChar; MaxLen: Cardinal): Integer;   Посимвольно сравнивает две строки с учетом регистра. Если строки идентичны, возвращает 0. То же, что и StrComp(), но без учета регистра. Посимвольно сравнивает две строки, начиная с первого символа до символа с порядковым номером MaxLen. Если строки идентичны, то возвращает 0. То же, что и StrLComp(), но без учета регистра символов.
Поиск вхождения строки или символа в строку
function StrPos(const Str1, Str2: PChar): PChar;   function StrScan(const Str: PChar; Chr: Char): PChar;   function StrRScan(const Str: PChar; Chr: Char): PChar;   Возвращает указатель на место вхождения строки Str2 в Str1. Если Str1 не содержит Str2, то возвращается nil. Возвращает указатель на первое вхождение символа Chr в строку Str. Если вхождений нет, возвращает nil. Возвращает указатель на последнее вхождение символа Chr в строку Str. Если вхождений нет, возвращает nil.
Другие функции
function StrLen(const Str: PChar): Cardinal;   functionStrEnd(const Str: PChar): PChar; Возвращает длину строки без учета завершающего нулевого символа. Возвращает указатель на завершающий нулевой символ строки Str.

Примечание: Для работы со строками с учетом языкового драйвера предусмотрены функции, аналогичные рассмотренным в таблице. Это функции ANSI: AnsiStrPos() – аналог StrPos(), AnsiStrScan() – аналог StrScan() и т. д.

 

procedure . . .;

var Source : string; Dest : PChar;

Begin

Source:='ABCDEFG';

Dest := StrNew(PChar('0123456789'));

StrPLCopy(PChar(Dest), Source, 5);

Application.MessageBox(Dest,'Результат', MB_OK);

StrDispose(Dest);

end;

Работа с памятью

Приложение, стартующее под управлением 32-разрядной версии Windows, получает в аренду 232 байт (4 Гбайт) виртуального адресного пространства, причем совсем не обязательно оснащать компьютер 4 гигабайтами дорогостоящего ОЗУ. В тот момент, когда для работы программы оперативной памяти окажется недостаточно, операционная система воспользуется услугами файла подкачки и перебросит на него часть информации. Именно поэтому мы говорим не о физической, а о виртуальной памяти. Каким образом Windows распределяет ячейки памяти между операционной системой и десятками клиентских приложений – достаточно сложный вопрос, который мы пока затрагивать не будет. Мы лишь познакомимся с рядом ключевых методов языка программирования Delphi, предназначенных для резервирования области памяти под наши данные.

Куча – это участок памяти, предназначенный для хранения данных изменяемой размерности.

Если в двух словах, то… в общем-то ничего сложного. И если вы не боитесь маленьких неприятностей, то можете попробовать немного поэкспериментировать с памятью. Но имейте в виду, что эксперименты окажутся по-настоящему увлекательными, а последствия (если вы только начинаете программировать) – попросту непредсказуемыми.

 

Таблица 3.11. Функции для работы с памятью

Функция Модуль Описание
procedureNew(varP: Pointer); System Создает новую динамическую переменную и устанавливает указатель на нее.
procedureDispose(varP: Pointer); System Очищает блок памяти, выделенный под динамическую переменную.
procedureGetMem(var P: Pointer; Size: Integer); System Создает динамическую переменную и указатель P на блок памяти.
procedureFreeMem(varP: Pointer[; Size: Integer]); System Освобождает блок памяти, связанный с указателем P.
functionAllocMem(Size: Cardinal): Pointer; Sysutils Выделяет блок размером Size в куче памяти, обнуляет его и возвращает указатель.
functionGetHeapStatus: THeapStatus; System, ShareMem Возвращает текущий статус менеджера памяти. Данные будут размещены в записи THeapStatus.
procedureGetMemoryManager(varMemMgr: TMemoryManager); System Указывает на точки входа действующего в настоящее время менеджера памяти. Информация окажется в MemMgr().
procedureSetMemoryManager(constMemMgr: TMemoryManager); System Устанавливает точки входа функциям, инкапсулированным в менеджере памяти. Изменения окажут влияние на поведение стандартных процедур: GetMem(), ReallocMem() и FreeMem().
functionIsMemoryManagerSet : Boolean; System Указывает, был ли изменен стандартный менеджер памяти с помощью функции SetMemoryManager().
procedureReallocMem(varP: Pointer; Size: Integer); System Перераспределяет динамическую переменную, распределенную ранее функциями GetMem(), AllocMem() или ReallocMem().
functionSysFreeMem(P: Pointer): Integer; System или ShareMem Освобождает блок памяти, на который указывает Pointer.
functionSysGetMem(Size: Integer): Pointer; System или ShareMem Выделяет Size байт и возвращает указатель на них. Если модуль ShareMem не используется, то блок выделяется в глобальной куче.
functionSysReallocMem(P: Pointer; Size: Integer): Pointer; System или ShareMem Возвращает указатель на Size байт, при этом значение P сохраняется.
functionCompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler; Sysutils Сравнивает содержимое двух блоков памяти по адресу P1 и P2 длиной Length байт. Возвращает true в случае полного соответствия.

Модуль ShareMem обеспечивает подключение менеджера памяти, позволяющего разделять память между двумя и более процессами. Этот менеджер содержится в динамической библиотеке borlndmm.dll. Учтите это при установке созданных вами приложений на другие компьютеры, т.к. без этой библиотеки приложение, обращающееся к модулю ShareMem, не сможет работать.

 

 








Дата добавления: 2016-03-15; просмотров: 710;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.