КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |