![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите про работу с PWideChar. [D7, XP]
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 - это вообще отдельная песня. В случае, если там используются символы, требующие более одного байта, то даже не вычислишь сразу длину строки (простым подсчетом) - нужен полный анализ. Поскольку там могут быть и однобайтные символы и двух- и трех-байтные вперемешку