Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Длинная строка




 

Строки этого типа относятся к объектам, которые размещаются в памяти динамически. Размер такой строки ограничен лишь доступным объемом оперативной памяти. Object Pascal выделяет и освобождает память для строк рассматриваемого типа по мере необходимости. Длинные строки – очень гибкий тип данных, но операции над ними требуют большего времени. Это объясняется необходимостью перераспределения памяти когда размер строки изменяется. Несмотря на это, в программах следует использовать строки именно этого типа.

Для объявления длинной строки используется ключевое слово string без спецификации длины:

 

var

S: string; { динамически размещаемая длинная строка }

 

Длинные строки не содержат 0–го элемента длины. Попытка прочитать нулевой элемент, обратившись к нему как S[0], будет пресечена на этапе компиляции. Вместо этого надо пользоваться функцией Length чтобы узнать длину строки, или процедурой SetLength – чтобы установить требуемую длину строки. Более подробно об этом – в разделе «Строковые функции».

 

Расширенная строка

 

Этот тип применяется при обращении к тем функциям Windows API, которые работают со строками символов Unicode, где каждый символ представлен двухбайтным кодом. Размер строки ограничен только доступным объемом памяти. В основном, строки этого типа необходимы при работе с функциями OLE (Object Linking and Embedding).

 

Строка с терминальным нулем

 

Строка с терминальным нулем это массив символов, последним элементом которого является символ #0. Такие строки не содержат нулевого байта длины. Терминальный ноль используется как признак конца строки. Большинство функций Windows API требуют, чтобы их параметры были массивами символов. Строковые типы Pascal к таковым не относятся, следовательно, необходим механизм, позволяющий использовать Pascal–строки в функциях Windows. Таким механизмом является тип PChar. Его можно использовать всюду, где требуются массивы символов.

В качестве примера рассмотрим функцию Windows API MessageBox. Эта функция отображает стандартный диалог сообщения. Ее объявление имеет вид:

 

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar;

uType: UINT): Integer;

 

Второй и третий параметры являются указателями на массивы символов: второй параметр указывает на текст сообщения, а третий – на заголовок диалогового окна. Чтобы обратиться к этой функции из Delphi – программы, следует воспользоваться типом PChar:

 

var

Text: string;

Caption: string;

begin

Text:= ¢This is a test¢;

Caption:= ¢Test Message¢;

MessageBox(0, PChar(Text), PChar(Caption), 0);

end;

 

Здесь PChar используется для преобразования длинной строки к типу строки с терминальным нулем.

Можно также явно применить переменную типа PChar:

 

var

Text: PChar;

begin

Text:= 'This is a test.';

MessageBox(0, Text, 'Message', 0);

end;

 

В Pascal–программах тип PChar используется сравнительно редко. В основном, вы будете иметь дело с типом string. При необходимости всегда можно преобразовать этот тип в строку с терминальным нулем так, как это сделано в примерах выше.

Обратите внимание на то, что фактическим параметром типа PChar, передаваемым в функцию Windows API, может быть литерал – строка символов, заключенная в кавычки.

В конце концов, вы можете использовать фактические параметры типа array of Char вместо PChar. Эту возможность иллюстрирует следующий фрагмент кода:

 

var

Text: array [0..20] of Char;

begin

Text:= 'This is a test.';

MessageBox(0, Text, 'Message', 0);

end;

 

На самом деле не важно, какой способ обеспечения совместимости вы будете применять. Просто поймите то, что нельзя передавать фактические параметры строковых типов языка Pascal в процедуры и функции Windows API, которые «понимают» только строки с терминальным нулем. В таких случаях используйте тип PChar или массив array of Char.

 




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


Дата добавления: 2015-04-29; Просмотров: 741; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.