+ Ответить в теме
Страница 1 из 2
1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Каким образом приложение может получить символ ещё длиннее?

  1. #1
    Недохакер system architect Сионист is an unknown quantity at this point Аватар для Сионист
    Регистрация
    31.03.2014
    Сообщений
    1,078
    Вес репутации
    0

    По умолчанию Каким образом приложение может получить символ ещё длиннее?

    Окно создано CreateWindowW. Но если код символа в UTF16 не лезет даже в два байта, то каким образом окно может получить этот символ? Вся суррогатная пара в WPARAM? Или как?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    WM_CHAR
    wParam
    The character code of the key.

    ...

    Remarks
    The WM_CHAR message uses Unicode Transformation Format (UTF)-16.
    Ну а как ещё?
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  4. #3
    Недохакер system architect Сионист is an unknown quantity at this point Аватар для Сионист
    Регистрация
    31.03.2014
    Сообщений
    1,078
    Вес репутации
    0

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    Вы два байта от анси не отличаете? UTF-16 тоже не равномерный, в нём есть символы по два байта, а есть символы, обозначаемые суррогатными парами по четыре байта. Вопрос: как получить символ, код которого не лезет в два байта? Не от своей экранной кнопки, там как раз просто: отправить WM_UNICHAR. А с клавиатуры?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.

  5. #4
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    А вы short от long отличаете? В long как раз 4 байта. А wParam как раз типа long. Я что, для кого-то другого копирую сюда выжимки из MSDN, где сказано, что сообщение поддерживает UTF-16?
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  6. #5
    Недохакер system architect Сионист is an unknown quantity at this point Аватар для Сионист
    Регистрация
    31.03.2014
    Сообщений
    1,078
    Вес репутации
    0

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    То есть суррогатная пара целиком в WPARAM? А что надо передать в четвёртый параметр WideCharToMultiByte в случае преобразования одной суррогатной пары? Количество символов, то есть 1, или количество wchar_t, то есть 2? И как её отличить? Кстати, в WPARAM 8 байт.
    Последний раз редактировалось Сионист; 17.12.2015 в 10:04.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.

  7. #6
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    Ну а как по-другому, чёрт побери? Если UTF-16 поддерживается по спецификации, а так же там указано, что символ содержится в wParam?
    Последний раз редактировалось Romeo; 17.12.2015 в 10:02.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  8. #7
    Недохакер system architect Сионист is an unknown quantity at this point Аватар для Сионист
    Регистрация
    31.03.2014
    Сообщений
    1,078
    Вес репутации
    0

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    Так мало ли как он поддерживается. Может приходят два сообщения подряд с половинками суррогатной пары?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.

  9. #8
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    Цитата Сообщение от Сионист Посмотреть сообщение
    А что надо передать в четвёртый параметр WideCharToMultiByte в случае преобразования одной суррогатной пары? Количество символов, то есть 1, или количество wchar_t, то есть 2?
    Цитата Сообщение от MSND
    cchWideChar [in]
    Size, in characters, of the string indicated by lpWideCharStr. Alternatively, this parameter can be set to -1 if the string is null-terminated. If cchWideChar is set to 0, the function fails.
    If this parameter is -1, the function processes the entire input string, including the terminating null character. Therefore, the resulting character string has a terminating null character, and the length returned by the function includes this character.
    If this parameter is set to a positive integer, the function processes exactly the specified number of characters. If the provided size does not include a terminating null character, the resulting character string is not null-terminated, and the returned length does not include this character.
    Цитата Сообщение от Сионист Посмотреть сообщение
    Кстати, в WPARAM 8 байт.
    Ты уверен? По поводу этого ничего не могу сказать. Нужно тестить.
    Цитата Сообщение от Сионист
    Так мало ли как он поддерживается. Может приходят два сообщения подряд с половинками суррогатной пары?
    Если бы это было так, то в спецификации было бы об этом сказано. Microsoft можно ругать сколько угодно и за что угодно, но документацию к API они содержат всегда в up-to-date состоянии, так как они получаются за это деньги. Привыкни верить MSDN, а не задаваться бесполезными вопросами "а что если...".
    Последний раз редактировалось Romeo; 17.12.2015 в 10:21.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  10. #9
    Недохакер system architect Сионист is an unknown quantity at this point Аватар для Сионист
    Регистрация
    31.03.2014
    Сообщений
    1,078
    Вес репутации
    0

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    Ты уверен?
    Ага. Для своего случая.
    По поводу этого ничего не могу сказать. Нужно тестить.
    Зачем? Всего лишь выбрать в свойствах проекта компилятор нужной разрядности.
    Microsoft можно ругать сколько угодно и за что угодно, но документацию к API они содержат всегда в up-to-date состоянии, так как они получаются за это деньги.
    То то им пришлось делать костыль для конкретной игры, когда выяснилось, что эта игра учитывает их старый ни где не описанный, а в новой версии исправленный глюк и глючит из-за исправления глюка. Теперь винда проверяет, кто к ней обращается за системными функциями и если та самая игра, то специально глючит во избежание глюка.
    Последний раз редактировалось Сионист; 17.12.2015 в 10:32.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.

  11. #10
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: Каким образом приложение может получить символ ещё длиннее?

    То то им пришлось делать костыль для конкретной игры, когда выяснилось, что эта игра учитывает их старый ни где не описанный, а в новой версии исправленный глюк и глючит из-за исправления глюка. Теперь винда проверяет, кто к ней обращается за системными функциями и если та самая игра, то специально глючит во избежание глюка.
    Это было в момент становления Win95, когда им серьезно угрожала OS/2 Warp от IBM. Поддержка старых приложений под ДОС типа игры СимСити о которой идет речь (не СимСити 2000, а старый СимСити под DOS4GW + SVGA) была критическим фактором удержания пользовательской базы. Только это было ровно 20 лет назад, да. С тех пор ядро у ОС от Майкрософт сменилось уже как минимум раза два или три (ЕМНИП NT, а затем Vista).
    Последний раз редактировалось Absurd; 17.12.2015 в 11:49.
    2B OR NOT(2B) = FF

+ Ответить в теме
Страница 1 из 2
1 2 ПоследняяПоследняя

Похожие темы

  1. Каким образом можно отыскать в интернете сестру?
    Привет! Вот вопрос, наверно глупый, как потом выяснится. Просто я обитаю не в Столице... Вообще-то хочу переезжать, но сейчас не об этом. Вобщем надо...
    от SnezhUnA в разделе Флейм.
  2. Каким образом можно объявить глобальную константу?
    В функции обїявляю константу как: const int count = 10; Поскажите, можно ли объявить таким же образом глобальную константу для текущего...
    от dmitry1208197320 в разделе C и C++
  3. Консолиное приложение и приложение с формой.
    Добрый день. Уже задавал этот вопрос в другом топике, но ответа не получил. Как в борландовском приложении с формой получать входные данные через...
    от AI_ в разделе C и C++
  4. Каким чудестным образом можно файл excel неределать в html
    Каким чудестным образом можно файл excel неределать в html. Что посоветуйте?
    от galich в разделе MS Office и VB(A).
  5. Каким образом гарантированно установить фокус
    на определенном компоненте диалогового окна?
    от mm в разделе Java

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения