Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VCL и UNICODE

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа!
 
Как применять subj? Если в начале программы я напишу
 
#define UNICODE
 
то возникает функция TApplication::MessageBoxW с параметрами const char*, тогда как необходим wchar_t... Может ли VCL работать с UNICODE?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 13:04 07-05-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TheChampion
С Unicode совместим, похоже, только CLX (Kylix), ну и WinAPI/MFC разумеется.

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 10:25 08-05-2005 | Исправлено: mr_eoi, 10:28 08-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi

Цитата:
С Unicode совместим, похоже, только CLX (Kylix), ну и WinAPI/MFC разумеется.

 
Правда? По-моему, в UNIX с UNICODE не сильно дружат, но я проверю. Про API я знаю, меня интересует поведение VCL: почему
 
#define UNICODE
 
в WinAPI приводит к тому, что все строковые аргументы меняются на wchar_t, а в TApplication появляется вместо MessageBoxA MessageBoxW, но его аргументы, как я говорил, не меняются. Зачем они сделали MessageBoxW?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 10:26 09-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion

Цитата:
#define UNICODE  
 в WinAPI приводит к тому, что все строковые аргументы меняются на wchar_t

потомучто для хранения юникода нужно два байта. wchar_t это юникод версия char. (различие в том, что одна занимает 2, а другая 1 байт).

Цитата:
 Зачем они сделали MessageBoxW?

Ядро 9х построено на однобайтовых кодировках. поэтому MessageBox равносильно MessageBoxA. Ядро 2000/XP построено на юникоде, поэтому MessageBox равносильно MessageBoxW. Для любой функции юзер-интерфейса, и не только (практически) ты найдёш такие тройки функций.
Если для 2000 используется ANSI версия функции, то при её вызове параметры копируютсю во временный буфер, где преобразовываются в юникод.

Цитата:
С Unicode совместим, похоже, только CLX (Kylix)

Делфи тоже совместима.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:57 10-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
 

Цитата:
 потомучто для хранения юникода нужно два байта. wchar_t это юникод версия char. (различие в том, что одна занимает 2, а другая 1 байт).  

 
Это мне известно.
 

Цитата:
 Если для 2000 используется ANSI версия функции, то при её вызове параметры копируютсю во временный буфер, где преобразовываются в юникод.

 
И это тоже. Вопрос вот в чем: поддерживает ли VCL UNICODE? Может ли она забить на AnsiString и использовать что-то вроде std::wstring? Т. е. "чиста UNICODE"?
 
И, наконец, зачем они сделали MessageBoxW, ничем не отличающуюся от MessageBoxA?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 08:32 11-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
И, наконец, зачем они сделали MessageBoxW, ничем не отличающуюся от MessageBoxA?

Это обманчивое сходство. Оносделано для того, чтобы легко было "портировать" с 9х в NT.

Цитата:
 Вопрос вот в чем: поддерживает ли VCL UNICODE?

Когда Делфа  (6/7) сохраняет формы, то сохраняет она их странно: Если есть текст на языке отличном от анг (Caption. к примеру) то он сохраняется в юникоде.
Цитата:
Может ли она забить на AnsiString и использовать что-то вроде std::wstring?

незнаю

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:50 11-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
 

Цитата:
 И, наконец, зачем они сделали MessageBoxW, ничем не отличающуюся от MessageBoxA?

 
Интересно, что в BCB 3 не было ни MessageBoxA, ни MessageBoxW. Был просто MessageBox.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 15:11 11-05-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
12:50 11-05-2005
Цитата:
Когда Делфа  (6/7) сохраняет формы, то сохраняет она их странно: Если есть текст на языке отличном от анг (Caption. к примеру) то он сохраняется в юникоде.
Наверное, это правильно, по крайней мере единообразно со стандартными Win32 строковыми ресурсами, которые изначально хранились в Unicode. Хотя, с другой стороны, зачем, если VCL не совместим (возможно временно) с Unicode.


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 15:21 11-05-2005 | Исправлено: mr_eoi, 15:24 11-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion

Цитата:
Интересно, что в BCB 3 не было ни MessageBoxA, ни MessageBoxW. Был просто MessageBox.

он сам подставлял нужную. Кстати, вот в меня в делфе так обявлено

Код:
 
function MessageBox; external user32 name 'MessageBoxA';
function MessageBoxA; external user32 name 'MessageBoxA';
function MessageBoxW; external user32 name 'MessageBoxW';
 

Я думаю это обясняет. А вообщето по этому поводу полезно Рихтера почитать.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 15:41 11-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim

Цитата:
А вообщето по этому поводу полезно Рихтера почитать.

 
Читал. Видел исходники. Из-за того, что
 

Цитата:
при её вызове параметры копируютсю во временный буфер, где преобразовываются в юникод.

 
я и хочу избавиться от AnsiString.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 16:00 11-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
так используй функции, которые кончаются на W. Полностью избавиться от AnsiString не получиться, по крайнер мере в обозримом будущем. Это по той причине, что даже в ХР часть кода ещё 16 битная. Переписывать лень. (не мне, а Майкрософту ). А цель отказа?

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 16:22 11-05-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
16:22 11-05-2005
Цитата:
даже в ХР часть кода ещё 16 битная

А вот с этого места поподробнее.

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 22:03 11-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
 

Цитата:
А цель отказа?

 
Избавиться от проблем с кодировками. И увеличить производительность. Строки не будут временно копироваться, преобраховываться и др. Хотя основная причина --- первая.
 

Цитата:
в ХР часть кода ещё 16 битная

 
Где именно? Я читал Рихтера, и он пишет, что начиная с Win2000 все мы живем в 32-битном мире и строки там UNICODE.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 07:11 12-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion

Цитата:
 И увеличить производительность.

Увеличить особо производительность не удастся по той причине, что строка разрастается в 2 раза - поэтому обработка тормозиться будет.
для MessageBox текст предварительно всё равно будет скопирован. Просто в одном случае будет выделено больше памяти. (если исх на анси, а результат - юникод). Я думаю здесь говорить о повышении производительности бессмысленно (пользователю всё равно за 0,1с или 0,001 появиться окошко MessageBox ). А если по поводу обработки строк, то лучше ручками (тем-более ты пишеш на С). Здесь Ansi явно обойдёт юникод. Рихтер говорит об этом.

Цитата:
что начиная с Win2000 все мы живем в 32-битном мире и строки там UNICODE

мг, и войны в Ираке нет. Есть придложение написать прогу, которая просканит каталог винды и поищет там файлы нужные.
Вот списочек файлов, которые точно 16-бит

Цитата:
 
C:\windows\winhelp.exe
C:\windows\system32\timer.drv
                                ds16gt.dLL
 


Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:40 12-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
А, может, ты и прав. Гейтс с ним, Юникодом. Пока мои приложения "общаются" только на русском и английском. Графика рассчитвыается гораздо дольше...
 

Цитата:
Вот списочек файлов, которые точно 16-бит


Цитата:
Есть придложение написать прогу, которая просканит каталог винды и поищет там файлы нужные.  

А Total Commander? Или я чего-то не понимаю?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 17:02 12-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TheChampion

Цитата:
А Total Commander?

А он может это?

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:19 12-05-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Искать файлы? Конечно, даже если имена задавать списком регулярных выражений и искать определенный текст в файле.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 17:36 12-05-2005
KDA

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
что даже в ХР часть кода ещё 16 битная

 
Т.е., по той же логике, если мы там обнаруживаем, например, command.com сотоварищи, мы делаем вывод, что в ХР (прям как в 95ой) вовсю использует DOS??? Может, все-таки не стоит путать битность прикладных программ и ядра?

Всего записей: 265 | Зарегистр. 30-12-2001 | Отправлено: 05:47 13-05-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
11:40 12-05-2005
Цитата:
Вот списочек файлов, которые точно 16-бит

А как, по-твоему, без WOW (частью которой являются приведённые тобой модули) на XP будут работать 16-битные приложения и DOS программы?

----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 08:02 13-05-2005 | Исправлено: mr_eoi, 08:05 13-05-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Выделение "16 битной части" становиться проблематичным - любой кандидат может быть защитан к WOW. Нужны новые идеи

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:19 13-05-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VCL и UNICODE


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru