Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

Подскажите про работу с PWideChar.   Найти похожие ветки 

 
MegaVolt_old   (2008-11-10 15:58) [0]

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


 
clickmaker ©   (2008-11-10 16:17) [1]

> Есть ли подобные для PWideChar?

если про API, то теже, только с окончанием W. lstrcpyW, lstrlenW etc

> Всегда ли длинна символа 2 байта

для данной реализации - да. UTF-16.

> Если все символы 2 байта то как обходятся с символами требующими
> больше байт

Для этого придумали UTF-8 и UTF-32


 
MegaVolt_Old   (2008-11-10 16:44) [2]

>если про API, то теже, только с окончанием W. lstrcpyW, lstrlenW etc

Ага оно. Недопетрил что дельфи исспользует lstrcpy с разными типа переменных :)

>Для этого придумали UTF-8 и UTF-32

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


 
clickmaker ©   (2008-11-10 16:46) [3]

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

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


 
Anatoly Podgoretsky ©   (2008-11-10 18:55) [4]

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2008-11-10 19:23) [6]

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

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


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

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

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

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

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


 
Anatoly Podgoretsky ©   (2008-11-10 20:12) [8]

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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


 
Anatoly Podgoretsky ©   (2008-11-11 15:38) [13]

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


 
MegaVolt_Old   (2008-11-11 15:51) [14]

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

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

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

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

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


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

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

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


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

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


 
Anatoly Podgoretsky ©   (2008-11-11 16:35) [17]

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

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


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

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

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


 
clickmaker ©   (2008-11-12 10:53) [19]

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

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


 
MegaVolt_Old   (2008-11-12 11:33) [20]

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

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


 
clickmaker ©   (2008-11-12 11:39) [21]

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

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


 
MegaVolt_Old   (2008-11-12 12:08) [22]

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

Ага.



Страницы: 1 вся ветка

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.021 c
2-1226387812
Kesha
2008-11-11 10:16
2008.12.21
отправка рисунка на принтер


1-1204880113
monk
2008-03-07 11:55
2008.12.21
инициализировать объект при переходе по вкладке


2-1226748565
Вовчик
2008-11-15 14:29
2008.12.21
Поиск по полям DBmemo


15-1224847352
Nastusha
2008-10-24 15:22
2008.12.21
Нарисовать алгоритм


2-1226172216
DOjD
2008-11-08 22:23
2008.12.21
DbGrid и полоса прокрутки!