powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
25 сообщений из 196, страница 6 из 8
Какой извращенец писал MessageBoxW?
    #39487397
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Так делал 20583452 ? Что получилось?

Как я и писал, при первом параметре 1252 выдает количество перекодированных символов, при 1251 выдает 0 и соответственно пустой текст.
Мдя ... там пример как код ошибки посмотреть. Если получил 0, то для получения кода ошибки надо вызвать GetLastError(). Что он вернул когда 0?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487400
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А файл 1251.nls физически имеется ?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487418
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbпри первом параметре 1252 выдает количество перекодированных символов, при
1251 выдает 0 и соответственно пустой текст.
Но как именно ты задавал этот параметр, ты, конечно же, не покажешь.

Sergey_rbТак я здесь и спрашиваю совет программистов.

Совет программистов: проверяй результат функции, выводи код ошибки. Даётся тебе уже не
первый раз. Но ты ему не следуешь. Назачем тогда спрашиваешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487438
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbпропущено...


Как я и писал, при первом параметре 1252 выдает количество перекодированных символов, при 1251 выдает 0 и соответственно пустой текст.
Мдя ... там пример как код ошибки посмотреть. Если получил 0, то для получения кода ошибки надо вызвать GetLastError(). Что он вернул когда 0?

Код ошибки 120
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487440
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbпри первом параметре 1252 выдает количество перекодированных символов, при
1251 выдает 0 и соответственно пустой текст.
Но как именно ты задавал этот параметр, ты, конечно же, не покажешь.

Sergey_rbТак я здесь и спрашиваю совет программистов.

Совет программистов: проверяй результат функции, выводи код ошибки. Даётся тебе уже не
первый раз. Но ты ему не следуешь. Назачем тогда спрашиваешь?


Код: plaintext
1.
MultiByteToWideChar(1252,0,rbuff,-1,tbuf,sizeof(rbuff));
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487451
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbMultiByteToWideChar(1252,0,rbuff,-1,tbuf,sizeof(rbuff));

Ты хочешь перекодировать из 1251, а пишешь 1252. Логика, блин!
И с чего ты взял, что у тебя в rbuff лежит null-terminated строка?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487456
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Мдя ... там пример как код ошибки посмотреть. Если получил 0, то для получения кода ошибки надо вызвать GetLastError(). Что он вернул когда 0?

Код ошибки 120

Если я правильно понял, то ошибка 120 это:
120: Эта функция не поддерживается для этой системы.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487457
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbMultiByteToWideChar(1252,0,rbuff,-1,tbuf,sizeof(rbuff));

Ты хочешь перекодировать из 1251, а пишешь 1252. Логика, блин!
И с чего ты взял, что у тебя в rbuff лежит null-terminated строка?


Потому что с параметром 1251 функция выдает ошибку.

Со строками все в порядке, т.к. с кодовой страницей 1251 работает корректно.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487465
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Мдя ... там пример как код ошибки посмотреть. Если получил 0, то для получения кода ошибки надо вызвать GetLastError(). Что он вернул когда 0?

Код ошибки 120
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx ERROR_CALL_NOT_IMPLEMENTED

120 (0x78)

This function is not supported on this system.
Если с 1252 вызывается, а с 1251 эта ошибка, то похоже что виндовс не знает как перекодировать из 1251. Как его этому научить - не подскажу.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487472
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли с 1252 вызывается, а с 1251 эта ошибка, то похоже что виндовс не знает как
перекодировать из 1251.

Или, что вероятнее, аффтар опять написал какую-то фигню и возвращаемый код - совсем от
другой функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487473
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbпропущено...


Код ошибки 120
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx ERROR_CALL_NOT_IMPLEMENTED

120 (0x78)

This function is not supported on this system.
Если с 1252 вызывается, а с 1251 эта ошибка, то похоже что виндовс не знает как перекодировать из 1251. Как его этому научить - не подскажу.

Именно так - с 1252 переводится, а с 1251 -нет.

Поэтому нужна функция перекодировки, не зависимая от кодовой страницы винды.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487474
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TЕсли с 1252 вызывается, а с 1251 эта ошибка, то похоже что виндовс не знает как
перекодировать из 1251.

Или, что вероятнее, аффтар опять написал какую-то фигню и возвращаемый код - совсем от
другой функции.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    	res = MultiByteToWideChar(1251,0, str.c_str(),-1,tbuf2,sizeof(str));
	    ::MessageBoxW(NULL,tbuf2, L"str", MB_ICONEXCLAMATION | MB_OK);


		if (res==0)
		{
		 wsprintf(t2, L" error %d", GetLastError());

	  ::MessageBoxW(NULL, t2, L"Multibyte res", MB_ICONEXCLAMATION | MB_OK);


		}
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487476
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как из кодов символов UTF8 собрать строку?
К примеру код символа
Код: plaintext
1.
D090

эквивалент буквы "А"
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487484
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак из кодов символов UTF8 собрать строку?
К примеру код символа
Код: plaintext
1.
D090

эквивалент буквы "А"
Точно UTF-8 ? В твоих примерах выше используется юникод (он же UTF-16).

строка это массив символов, последний 0.
В юникоде так:
Код: plaintext
1.
2.
3.
4.
5.
wchar_t str[4];
str[0] = 0xD090;
str[1] = 0xD090;
str[2] = 0xD090;
str[3] = 0;


это аналогично
Код: plaintext
1.
wchar_t str[4] = "ААА";
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487488
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Код: sql
1.
2.
3.
4.
5.
::MessageBoxW(NULL,tbuf2, L"str", MB_ICONEXCLAMATION | MB_OK);

		if  (res==0)
		{
		 wsprintf(t2, L" error %d", GetLastError());



Ну, как я и сказал, этот хомячок выводит код ошибки MessageBoxW.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487492
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак из кодов символов UTF8 собрать строку?
К примеру код символа
Код: plaintext
1.
D090

эквивалент буквы "А"Очень просто! Сначала приведи строку в utf8 к unicode по алгоритму кодирования, ссылку на который я давал тебе здесь ранее, а потом можешь работать с такой строкой стандартными средствами - функциями WinAPI. В чем проблема?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487496
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Лазарусе я использую функцию CP1251ToUTF8
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487504
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rb
Код: sql
1.
2.
3.
4.
5.
::MessageBoxW(NULL,tbuf2, L"str", MB_ICONEXCLAMATION | MB_OK);

		if  (res==0)
		{
		 wsprintf(t2, L" error %d", GetLastError());



Ну, как я и сказал, этот хомячок выводит код ошибки MessageBoxW.


Странно, но я на экране вижу сообщение MessageBoxW причем без ошибок
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487559
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbКак из кодов символов UTF8 собрать строку?
К примеру код символа
Код: plaintext
1.
D090

эквивалент буквы "А"
Точно UTF-8 ? В твоих примерах выше используется юникод (он же UTF-16).

строка это массив символов, последний 0.
В юникоде так:
Код: plaintext
1.
2.
3.
4.
5.
wchar_t str[4];
str[0] = 0xD090;
str[1] = 0xD090;
str[2] = 0xD090;
str[3] = 0;


это аналогично
Код: plaintext
1.
wchar_t str[4] = "ААА";



не работает прямое присвоение, пишет ошибку
error C2166: l-value specifies const object

если поставить в кавычки, то ошибка
error C2440: '=' : cannot convert from 'char [7]' to 'const char'
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487571
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
	wchar_t str[4];
	str[0] = 0x0410;
	str[1] = 0x0410;
	str[2] = 0x0410;
	str[3] = 0;
	MessageBoxW(0, str, str, 0);


только 0xD090 это иероглиф какой-то. Буква А имеет код 0x0410
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487581
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tу меня все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
	wchar_t str[4];
	str[0] = 0x0410;
	str[1] = 0x0410;
	str[2] = 0x0410;
	str[3] = 0;
	MessageBoxW(0, str, str, 0);


только 0xD090 это иероглиф какой-то. Буква А имеет код 0x0410

Тут я ступил, надо брать код UNICODE, а не UTF8
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487598
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tу меня все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
	wchar_t str[4];
	str[0] = 0x0410;
	str[1] = 0x0410;
	str[2] = 0x0410;
	str[3] = 0;
	MessageBoxW(0, str, str, 0);


только 0xD090 это иероглиф какой-то. Буква А имеет код 0x0410

Тут я ступил, надо брать код UNICODE, а не UTF8Потому, что UTF8, в отличие от UNICODE, это не кодировка символов, а некий способ представления кода символа UNICODE в виде байт-последовательности переменной длины.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487607
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbесли поставить в кавычки, то ошибка
error C2440: '=' : cannot convert from 'char [7]' to 'const char'
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487609
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да что ж у меня привычка CTRL+ENTER давить-то...
wchar_t str[4] = L"ААА";
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487616
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПотому, что UTF8, в отличие от UNICODE, это не кодировка символов, а некий способ представления кода символа UNICODE в виде байт-последовательности переменной длины.
В виндовсе тоже не UNICODE, а UTF-16LE. Как понимаю они совпадают до определенного момента.
https://ru.wikipedia.org/wiki/UTF-16 UTF-16LE и UTF-16BE
Предусмотрена также возможность внешнего указания порядка байтов — для этого кодировка должна быть описана как UTF-16LE или UTF-16BE (little-endian / big-endian), а не просто UTF-16. В этом случае метка порядка байтов (U+FEFF) не нужна.

UTF-16 в ОС Windows
Основная статья: Юникод в операционных системах Microsoft

В API Win32, распространённом в современных версиях операционной системы Microsoft Windows, имеется два способа представления текста: в форме традиционных 8-битных кодовых страниц и в виде UTF-16.

При использовании UTF-16, Windows не накладывает ограничений на прикладные программы касательно кодирования текстовых файлов, позволяя им использовать как UTF-16LE, так и UTF-16BE посредством установки и трактовки соответствующей метки порядка байтов. Однако внутренний формат Windows - всегда UTF-16LE. Этот момент следует учитывать при работе с исполняемыми файлами, использующими юникодовые версии функций WinAPI. Строки в них всегда кодируются в UTF-16LE[1].

В файловых системах NTFS, а также FAT с поддержкой длинных имён, имена файлов записываются также в UTF-16LE.
...
Рейтинг: 0 / 0
25 сообщений из 196, страница 6 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]