Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите про работу с PWideChar. [D7, XP]


Страницы:   1 2

MegaVolt_old ©   (2008-11-10 15:58:00) 

Добрый день.
Столкнулся с необходимостью работы с PWideChar. Где можно почитать про особенности, какие функции есть для этого. Для PСhar есть отдельные функции для объединения строк, поиска в них и пр... Есть ли подобные для PWideChar?
Всегда ли длинна символа 2 байта? Если нет то как работет механизм извлечения нного символа? Полным чтением строки до заданного? Если все символы 2 байта то как обходятся с символами требующими больше байт?


MegaVolt_Old   (2008-11-12 12:08:00) [1]

>единственное, за чем нужно следить, чтобы не было переполнения буфера

Ага.


clickmaker   (2008-11-12 11:39:00) [2]

> не нужно или я ошибаюсь?

не нужно
единственное, за чем нужно следить, чтобы не было переполнения буфера, выделенного под строку. Поскольку апишные функции за этим следить не имеют возможности.


MegaVolt_Old   (2008-11-12 11:33:00) [3]

>Если напишешь свою функцию

Это понятно :)
А если же функции стандартные то за нулём следить вроде не нужно или я ошибаюсь?


clickmaker   (2008-11-12 10:53:00) [4]

> p:='Hello'; // Ноль присвоен автоматом.

потому что константа.
Если напишешь свою функцию, например, для копирования, то ноль должен будешь поставить сам


MegaVolt_Old   (2008-11-12 10:16:00) [5]

Функции для работы с Pchar вроде бы автоматом присваивают #0 на конце? По крайней мере при присваивании точно
Var
 p:Pchar;
...
p:='Hello'; // Ноль присвоен автоматом.

Получается есть ситуации где ноль присваивается а есть где нет?


Anatoly Podgoretsky   (2008-11-11 16:35:00) [6]

> MegaVolt_Old  (11.11.2008 16:04:16)  [16]

Надо было еще сказать, что string автоматически включает заключительный символ #0, что требуется для правильной работы Pchar. В отличии от классического Pchar, где за этим должен следить программист, соответсвенно ошибок меньше.


MegaVolt_Old   (2008-11-11 16:04:00) [7]

Ух ты... Незнал. Спасибо.


Anatoly Podgoretsky   (2008-11-11 15:57:00) [8]

> MegaVolt_Old  (11.11.2008 15:51:14)  [14]

А они не нужны, ни одна функция АПИ не меняет размер переданого буфера и его адрес. Поэтому совместимость 100 процентная, гарантированая.


MegaVolt_Old   (2008-11-11 15:51:00) [9]

>string обратно совместим с PChar.

А как же счётчик ссылок на строку по отрицательному смещению? И длинна строки. В Pchar же этих элементов нет.

> WideString аналогично.

Wide String тоже содержит свою длинну по отрицательному смещению. PWideChar нет.

А так да оба указатели на стоку.


Anatoly Podgoretsky   (2008-11-11 15:38:00) [10]

Собственно все заканчивается на PWideChar(WideString), а назад даже приведения не требуется.


Anatoly Podgoretsky   (2008-11-11 15:36:00) [11]

> MegaVolt_Old  (11.11.2008 15:27:11)  [11]

Ее нет string обратно совместим с PChar. WideString аналогично.


MegaVolt_Old   (2008-11-11 15:27:00) [12]

>по функциям начинающих с Wide

Это же функции для работы ы WideString а не WideChar. Я понимаю что разница очень символична. Но всё же.

А искал и по Wide и по PWideChar просто не там. Надо было в справке по WinApi рыть :)


Anatoly Podgoretsky   (2008-11-11 15:20:00) [13]

> MegaVolt_Old  (11.11.2008 14:34:09)  [9]

Да какая информация может быть, это же указатель на WideChar - по сути PChar, поэтому по этому слову искать не стоит, искать надо по WideChar, WideString, по строковым функциям, по функциям начинающих с Wide


MegaVolt_Old   (2008-11-11 14:34:00) [14]

>Но формально информации в справке очень много.

Согласен. Но честно говоря я не осилил найти :( Кстати вчера перерыл справку дополнительно. Про PWideChar функции говорится только в той части где про WinApi до неё я не добрался :(


Anatoly Podgoretsky   (2008-11-10 20:12:00) [15]

> MegaVolt_Old  (10.11.2008 19:33:07)  [7]

В справке конечно очень много статей, но организовано это бардачно, связать в целое нелегко. Надо бегать по ссылкам в справке и то не все удастся найти. Ты еще справку из Д200х не видел. Но формально информации в справке очень много.


MegaVolt_Old   (2008-11-10 19:33:00) [16]

>Это не особые функции, а перекрытые со старыми названиями

Это я понял уже после первого ответа :)

>если ты посмотрел справку, то увидел бы это

Да зная что искать я нашел в конце справки про null-terminated strings приписку что всё вышеописанное относится и к Wide string. Просто я просматривал начало статьи в справке и про wide там небыло упомянуто :(


Anatoly Podgoretsky   (2008-11-10 19:23:00) [17]

> MegaVolt_Old  (10.11.2008 19:16:05)  [5]

Это не особые функции, а перекрытые со старыми названиями, но если ты посмотрел справку, то увидел бы это.


MegaVolt_Old   (2008-11-10 19:16:00) [18]

>большинство особых функций начинается с Wide

Как оказалось чать нужных мне аналогичны тем же для Pchar и на wide не начинаются.

На счёт забита это речь про D7 идёт? В справке на Wide есть десяток тем из них добрая половина преобразование из WideString и String и прочие форматы и обратно. Остальные сравнение и форматирование. Простого сложения строк по Wide я ненашел. Поэтому и задал вопрос. Окзалось что всё ещё проще.


Anatoly Podgoretsky   (2008-11-10 18:55:00) [19]

Справка просто забита информацией, кроме того несложно догадаться, что большинство особых функций начинается с Wide


clickmaker   (2008-11-10 16:46:00) [20]

> Т.е. есть символы который через TWideChar нельзя отобразить?

ну да. UTF-8 - это вообще отдельная песня. В случае, если там используются символы, требующие более одного байта, то даже не вычислишь сразу длину строки (простым подсчетом) - нужен полный анализ. Поскольку там могут быть и однобайтные символы и двух- и трех-байтные вперемешку


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо