· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Интересная ошибка

Посл.отвђт Сообщенiе


Дата: Апр 19, 2004 09:11:36

У меня прога имеет основное окно - Анси, но в ней Ричедит создаётся как Юникод окно. В ХР всё работает, а в 98-ой ошибка при создании Ричедит окна, номер 120, описание: "Эта функция доступна только в режиме Win32". Я думал, что все оси начиная с 95-ой - Win32.
Кто что думает по этому поводу?


Дата: Апр 19, 2004 10:01:01

SolidCode
Не верная формулировка - This function is not supported on this system - ни слова о win32.
Как называется класс окна RichEdit'а?
В отладчике прошагать до ошибки не пробовал?


Дата: Апр 19, 2004 11:26:35

Насколько я знаю, 9Х\МЕ не поддерживают уникод.
Даже понятия не имеют о нем.
В них нет суффикса -W.
Скорее всего придется переписывать с использованием
обычных ф-ии, или забить на эту рухлядь(9x/me)


Дата: Апр 19, 2004 12:00:53

Есть такая штука, как Microsoft Layer for Unicode, специально для использования уникода под 9х.


Дата: Апр 19, 2004 19:04:43

q_q
Ради тебя я ещё раз залезу в 98 (SE, рус. версия) и выполню код, чтобы получить точную строку, которую он мне выдаёт. Это всё формируется GetLastError и FormatMessage.
А вообще спасибо за нормальный вариант описания ошибки.

SammIk
То есть как не поддерживаются? Смеётесь, что-ли. А как же о них в СДК написано?
Они сначала переводят свои юникодовские строки в анси, а затем уж спокойно выполняют.
В той же проге я скармливаю функции lstrlenW юникодовскую строку и она исправно возвращает мне её длину. А вот юникодовские окна делать не хочет.
Да, вот уж посоветовали.
Volodya, Edmond, Aquila, вы люди опытные, рассудите нас в этом замешательстве!

RobinFood
Это что за штука? Интерфейс какой? Или как? И как его использовать.

Но что-то подсказывает мне, что дело в другом. Может ещё кто-нибудь что-нибудь скажет?


Дата: Апр 20, 2004 04:18:52

SolidCode
Это что за штука? Интерфейс какой? Или как? И как его использовать
В MSDN прочитай. Там в описании для каждой апишки, использующей текст про этот Layer написано.


Дата: Апр 20, 2004 13:09:15

MSDN:

By design, functions that take string parameters can handle either Unicode™ (wide character) or ANSI strings. However, Windows 95/98/Me does not implement the Unicode (or wide character) version of most functions. With few exceptions, these functions are implemented as stubs that simply return an error value. However, Windows 95/98/Me does provide Unicode implementations of the following functions.

EnumResourceLanguages
EnumResourceNames
EnumResourceTypes
ExtTextOut
FindResource
FindResourceEx
GetCharWidth
GetCommandLine
GetTextExtentPoint
GetTextExtentPoint32
lstrcat (Windows 98/Me)
lstrcpy(Windows 98/Me)
lstrlen
MessageBox
MessageBoxEx
TextOut


Дата: Апр 20, 2004 20:48:59 · Поправил: SolidCode

Да, ребята. Вы правы. Я потом на этот вопрос свой СДК перерыл, и Layer нашёл, и указание на то, что в 9Х действительно лучше Юникодом не пользоваться, так как большинство функций вернут ошибку. Плохо изучал в своё время.
Видно придётся делать две версии проги.

Всем спасибо за терпение на нетерпеливого.


Дата: Апр 20, 2004 20:59:44

SolidCode

Знаешь ...
Я вчера (прогой WinSpy++) пересмотрел RichEdit-ы (порядка 20-ти штук) всех имевшихся у меня программ , которые его используют . И не нашёл ни одного юникодовского ричедита .

Может стоит пересмотреть возможность использования ANSI-версии , а не делать две версии программы .

з.ы. смотрел на w2k .


Дата: Апр 22, 2004 06:04:43

Спасибо за внимание, bogrus.
Ты прав по поводу общей тенденции с ричэдитом. Обычно люди используют АНСИ версию и мозги не парят.
Но я живу в Казахстане. По-уму казахский язык начал поддерживаться в Винде лишь с 2000-ой версии. До этого приходилось делать собственный драйвер или альт-набором номера символа вводить и лишь в конкретных шрифтах. В ДОСе - простейшей заменой знакогенератора.
Чтобы нормально работать с казахским в 2000 и далее, нужен юникодовский ричэдит. Ансишный при наборе казахских букв в XP даёт "?" (то есть винда пытается конвертировать юникодовские символы от драйвера клавы в анси, они нормально не конвертируются и дают лишь "?"). Тогда делаем прогу (основное окно) в Анси, а ричэдит, в зависимости от версии Винды, в Анси или Юникоде. Но такое работать не будет. Я уже с этим столкнулся.
Юникодовскому ричэдиту нужно посылать только юникодовские сообщения, а ансишному - только ансишные. А значит, что для соответствующего типа окна придётся свою процедуру обработки сообщений писать. Но даже этого мало. Все сообщения идут через основное окно. А оно у нас ансишное. И процедуры выборки и доставки сообщений такие же. При попытке набора казахских букв в ХР в абсолютно юникодовском ричэдите всё-равно получаем вопросы. Исправляем GetMessage и иже с ним на юникодовские версии и всё наконец начинает работать по-уму.
Вот такой путь адепта.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.059