powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
196 сообщений из 196, показаны все 8 страниц
Какой извращенец писал MessageBoxW?
    #39475479
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в качестве параметра поставил число вместо строки?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475485
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
WINUSERAPI int WINAPI MessageBoxW(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT 
uType);


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

Я пишу в Embedded C++ для WinCE

Получаю такую ошибку
автор
MessageBoxW( s2, L"SD", MB_OK);

error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475504
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю речь о hWnd (хэндле окна в котором вывести), которого нет в MessageBox() других ЯП.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЭто какая версия?
Это WinAPI, оно всегда такое было. Добавь первым параметром хэндл окна своей проги в котором вывести или NULL чтобы отдельным окном.

Код: plaintext
1.
MessageBoxW(NULL, s2, L"SD", MB_OK);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475513
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЯ пишу в Embedded C++ для WinCE

Получаю такую ошибку

У функции 4 параметра. Ты забыл указать первый из них.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475518
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЯ пишу в Embedded C++ для WinCE

Получаю такую ошибку

У функции 4 параметра. Ты забыл указать первый из них.


Это другая функция

авторMessageBoxW(NULL, s2, L"SD", MB_OK);



Выдает ошибку

авторerror C2660: 'MessageBoxW' : function does not take 4 parameters
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475522
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475525
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T MessageBox (Windows CE 5.0)

Там тоже описана функция с 4 параметрами.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475529
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЭто другая функция

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

авторerror C2660: 'MessageBoxW' : function does not take 4 parameters
Странно. С WinCE никогда не сталкивался, а в обычных виндовсах буква W на конце обозначает что используются юникодные строки.

Возможно в WinCE это по другому и там нет MessageBoxW, а твой MessageBoxW какая-то самодельная функция. Поищи у себя в исходниках.

По хорошему не надо явно W писать, а задать в свойствах проекта использование юникода и вызывать
Код: plaintext
1.
MessageBox(NULL, s2, L"SD", MB_OK);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475536
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЭто другая функция

Тогда читай документацию к её параметрам. Это HWND и две строки.


Это две строки и набор кнопок

Вот так работает

авторTCHAR tt[] = _T("TEST");
MessageBoxW(tt, L"Внимание!", MB_OK);



Как в сообщение вывести переменную типа int или char?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475542
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbВыдает ошибку

пропущено...

Странно. С WinCE никогда не сталкивался, а в обычных виндовсах буква W на конце обозначает что используются юникодные строки.

Возможно в WinCE это по другому и там нет MessageBoxW, а твой MessageBoxW какая-то самодельная функция. Поищи у себя в исходниках.

По хорошему не надо явно W писать, а задать в свойствах проекта использование юникода и вызывать
Код: plaintext
1.
MessageBox(NULL, s2, L"SD", MB_OK);



MessageBox выбирает из 2 вариантов - MessageBoxA или MessageBoxW.

В моем случае используется юникодная версия функции.
Но в обоих случаях у функции 3 параметра.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475547
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак в сообщение вывести переменную типа int или char?
Преобразовать в строку, затем строку вывести.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475548
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как функция описана в заголовочном файле WinCE SDK, так и вызывай. В чем проблема?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475549
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbКак в сообщение вывести переменную типа int или char?
Преобразовать в строку, затем строку вывести.

Дело в том, что эта функция не выводит строку
авторchar * s2;
MessageBox(s2, L"SD", MB_OK)


Выдает ошибку

автор error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475556
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbMessageBox выбирает из 2 вариантов - MessageBoxA или MessageBoxW.

В моем случае используется юникодная версия функции.
Но в обоих случаях у функции 3 параметра.Чудес не бывает! В документации по WinCE функция имеет 4 параметра и первый из них HWND. Ты уверен, что компилятор тянет заголовочный файл из WinCE SDK? Проверь include пути!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475559
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Преобразовать в строку, затем строку вывести.

Дело в том, что эта функция не выводит строку
авторchar * s2;
MessageBox(s2, L"SD", MB_OK)


Выдает ошибку

автор error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'
Правильно, т.к. char * это ANSI строка, а функции надо юникод, т.е. TCHAR* (оно же unsigned short *)
Надо конвертировать
Код: plaintext
1.
2.
3.
TCHAR tt[256];
convert(s2, tt);
MessageBox(tt, L"SD", MB_OK);

С юникодом не работал, функции не подскажу, ищи что вместо convert() использовать.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475562
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbMessageBox выбирает из 2 вариантов - MessageBoxA или MessageBoxW.

В моем случае используется юникодная версия функции.
Но в обоих случаях у функции 3 параметра.Чудес не бывает! В документации по WinCE функция имеет 4 параметра и первый из них HWND. Ты уверен, что компилятор тянет заголовочный файл из WinCE SDK? Проверь include пути!

Пример с такой же ошибкой

http://forum.vingrad.ru/topic-300919.html

Там у функции 3 параметра.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475567
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475573
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475576
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbПример с такой же ошибкой

http://forum.vingrad.ru/topic-300919.html

Там у функции 3 параметра.Потому что там речь идет о вызове статического метода класса CWnd, поэтому без первого параметра, так как CWnd уже знает хендл окна. Попробуй так:
Код: plaintext
1.
::MessageBox(hwnd, caption, text, MB_OK);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475578
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для конвертации еще есть mbstowcs()
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475584
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПотому что там речь идет о вызове статического метода класса CWnd, поэтому без первого параметра, так как CWnd уже знает хендл окна. Попробуй так:
Код: plaintext
1.
::MessageBox(hwnd, caption, text, MB_OK);


ИМХО не поможет. Пусть дальше метод вызывает.

Как я понял у ТС проблема с кодировками. 20580928 Он char* пытается в параметры передать, думая что это строка.

И как понимаю "error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'" он трактует что сюда число надо.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475592
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Trdb_devПотому что там речь идет о вызове статического метода класса CWnd, поэтому без первого параметра, так как CWnd уже знает хендл окна. Попробуй так:
Код: plaintext
1.
::MessageBox(hwnd, caption, text, MB_OK);


ИМХО не поможет. Пусть дальше метод вызывает.

Как я понял у ТС проблема с кодировками. 20580928 Он char* пытается в параметры передать, думая что это строка.

И как понимаю "error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'" он трактует что сюда число надо.

Как тогда в качестве параметра передать число?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475598
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО не поможет. Пусть дальше метод вызывает.

Как я понял у ТС проблема с кодировками. 20580928 Он char* пытается в параметры передать, думая что это строка.

И как понимаю "error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'" он трактует что сюда число надо.Потому что он пытается передать строку однобайтных символов вместо UNICODE. Указатель на строку unicode, это, как раз, const unsigned short* - широкий символ . В заголовочных файлах объявлено так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
typedef wchar_t WCHAR;
typedef const WCHAR *LPCWSTR,*PCWSTR;
WINUSERAPI int WINAPI MessageBoxW(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType);

typedef char CHAR;
typedef const CHAR *LPCSTR,*PCSTR;
WINUSERAPI int WINAPI MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475599
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак тогда в качестве параметра передать число?
Преобразовать его в строку.
wsprintf()
Код: plaintext
1.
2.
3.
4.
int x = 123;
TCHAR tt[256];
wsprintf(tt, L" x = %d", x);
MessageBox(tt, L"SD", MB_OK);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475602
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак тогда в качестве параметра передать число?Кто тебе сказал, что компилятор делает разницу между числом и строкой? Без понимания, что в C++ из себя представляет строка и что такое приведение типа указателя тебе тут пока нечего делать. Иди учить матчасть!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475612
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbКак тогда в качестве параметра передать число?
Преобразовать его в строку.
wsprintf()
Код: plaintext
1.
2.
3.
4.
int x = 123;
TCHAR tt[256];
wsprintf(tt, L" x = %d", x);
MessageBox(tt, L"SD", MB_OK);



Спасибо!
Хоть что-то заработало!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475615
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто удивительно, почему Мастер предлагает закопать дельфи и всех дельфистов оптом...

Да вот же почему =)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475619
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbСпасибо!
Хоть что-то заработало!
С wsprintf() поаккуратней, т.к. можно устроить переполнение буфера . Такие косяки потом долго искать придется.

И матчасть поучи.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475630
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbСпасибо!
Хоть что-то заработало! Разберись с этим:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int main( int argc, char *argv[])
{
  long msg[7] = {
      0x04270423, 0x00200418, 0x0410041C, 0x04270422,
      0x04210410, 0x042C0422, 0x00000021};
  ::MessageBoxW(NULL, (LPCWSTR)&msg, (LPCWSTR)&msg, MB_ICONEXCLAMATION | MB_OK);
  return 0;
}
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475634
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbСпасибо!
Хоть что-то заработало! Разберись с этим:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int main( int argc, char *argv[])
{
  long msg[7] = {
      0x04270423, 0x00200418, 0x0410041C, 0x04270422,
      0x04210410, 0x042C0422, 0x00000021};
  ::MessageBoxW(NULL, (LPCWSTR)&msg, (LPCWSTR)&msg, MB_ICONEXCLAMATION | MB_OK);
  return 0;
}



Ну вот, а так хотелось по быстрому переписать прогу для терминалов!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475652
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,
Про извращенца свои слова назад берешь?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475655
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSergey_rb,
Про извращенца свои слова назад берешь?

Беру
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475659
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет .
Правильно работает функция
::MessageBoxW

Но речь шла о функции
MessageBoxW

у которой 3 параметра.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475681
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНо речь шла о функции
MessageBoxW

у которой 3 параметра.

Тогда это не функция, а метод определённого класса (о чём ты "забыл" упомянуть). К
которому опять же, наверное, есть документация.

Но вне зависимости от этого пытаться скармливать char* туда, где требуется wchar_t* -
целиком и полностью твоя ошибка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475808
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удивительно как все возбудились.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475895
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТогда это не функция, а метод определённого класса (о чём ты "забыл" упомянуть). К
которому опять же, наверное, есть документация.

Но вне зависимости от этого пытаться скармливать char* туда, где требуется wchar_t* -
целиком и полностью твоя ошибка.
Это один из методов CWnd , о чем я ему уже писал 20580975 .
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39475995
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал такой вариант

авторwchar_t tbuf[1024];
char rbuff[1024];

res = recv(sock, rbuff, 1024, 0);

MultiByteToWideChar(1251,0,rbuff,-1,tbuf,sizeof(rbuff));

::MessageBoxW(NULL, (LPCWSTR)&tbuf, L"Тест", MB_ICONEXCLAMATION | MB_OK);



На WinCe 5.0 выдает правильное сообщение на русском, на WinCe 6.0 выдает пустое сообщение.

Что опять не так?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476035
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно WinCe 6.0 не знает 1251 и ее как-то установить надо.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476053
Фотография Невезучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня прога, написанная на Лазарусе работает под обеими виндами, так что все там установлено.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476067
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНа WinCe 5.0 выдает правильное сообщение на русском, на WinCe 6.0 выдает пустое сообщение.

Что опять не так?Потому что надо внимательнее читать документацию !
"cchWideChar [in]
Size, in characters , of the buffer indicated by lpWideCharStr. If this value is 0, the function returns the required buffer size, in characters, including any terminating null character, and makes no use of the lpWideCharStr buffer."

Для начала убедись, что после recv() в rbuff ты имеешь null-terminated строку.
Код: plaintext
1.
2.
if ((bool)(cnt = ::MultiByteToWideChar(1251, 0, rbuff, -1, tbuf, sizeof(tbuff) / sizeof(wchar_t) - 1)))
  ::MessageBoxW(NULL, (LPCWSTR)&tbuf, L"Тест", MB_ICONEXCLAMATION | MB_OK);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476082
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не прокатило

Вариант с получением IP на WinCe 6.0 не работает, хотя сам адрес определяется корректно

автор gethostname(PCName, 30);

h = gethostbyname(&PCName[0]);

LocalIP = inet_ntoa (*(reinterpret_cast<in_addr *>(*(h->h_addr_list))));


MultiByteToWideChar(1251,0,LocalIP,-1,tbuf,30);

::MessageBoxW(NULL,(LPCWSTR)&tbuf, L"Connected", MB_ICONEXCLAMATION | MB_OK);

Может действительно, проблема с кодировками?

Как определить, в какой кодировке пришло сообщение в буфер?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476086
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbМожет действительно, проблема с кодировками?
Как определить, в какой кодировке пришло сообщение в буфер?Нет, проблема в ДНК. Иди учить матчасть по null-terminated строкам и арифметику для начальных классов!
4 * 3 символа на октет + 3 * символ-разделитель (точка) + null-terminate символ = ???
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476089
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbМожет действительно, проблема с кодировками?

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

Нет у меня отладчика, тестирую на терминалах.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476100
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbМожет действительно, проблема с кодировками?
Как определить, в какой кодировке пришло сообщение в буфер?Нет, проблема в ДНК. Иди учить матчасть по null-terminated строкам и арифметику для начальных классов!
4 * 3 символа на октет + 3 * символ-разделитель (точка) + null-terminate символ = ???

У WinCe 6.0. не такая математика как у WinCe 5.0?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476158
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНет у меня отладчика, тестирую на терминалах.Удачи!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476160
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку смотри
Код: plaintext
1.
2.
3.
4.
5.
...
if MultiByteToWideChar(...) == 0
   wsprintf(tbuf, L" error %d", GetLastError());
endif
...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476210
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНе прокатило

Вариант с получением IP на WinCe 6.0 не работает, хотя сам адрес определяется корректно

автор gethostname(PCName, 30);

h = gethostbyname(&PCName[0]);

LocalIP = inet_ntoa (*(reinterpret_cast<in_addr *>(*(h->h_addr_list))));


MultiByteToWideChar(1251,0,LocalIP,-1,tbuf,30);

::MessageBoxW(NULL,(LPCWSTR)&tbuf, L"Connected", MB_ICONEXCLAMATION | MB_OK);

Может действительно, проблема с кодировками?

Как определить, в какой кодировке пришло сообщение в буфер?Во-первых, в структуре hostent функция gethostbyname() возвращает совсем не int, который ты пытаешься сконвертировать в строку через inet_ntoa().
Во вторых:
"Note The gethostbyname function has been deprecated by the introduction of the https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms738520(v=vs.85).aspx] getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname ."

З.Ы. Лично у меня всё прекрасно работает.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476221
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbНе прокатило

Вариант с получением IP на WinCe 6.0 не работает, хотя сам адрес определяется корректно

пропущено...


Может действительно, проблема с кодировками?

Как определить, в какой кодировке пришло сообщение в буфер?Во-первых, в структуре hostent функция gethostbyname() возвращает совсем не int, который ты пытаешься сконвертировать в строку через inet_ntoa().
Во вторых:
"Note The gethostbyname function has been deprecated by the introduction of the https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms738520(v=vs.85).aspx] getaddrinfo function. Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname ."

З.Ы. Лично у меня всё прекрасно работает.

Забыл написать объявление

Код: plaintext
1.
char * LocalIP;
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39476230
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗабыл написать объявление
Код: plaintext
1.
char * LocalIP;

Тогда нафига inet_ntoa() ?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478797
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Embedded C++ не поддерживает потоки.
Я в шоке.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478814
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbEmbedded C++ не поддерживает потоки.
Я в шоке.До С++11 в языке вообще не было поддержки потоков, что не мешало писать многопоточные программы :)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478826
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbEmbedded C++ не поддерживает потоки.
Я в шоке.Ни один компилятор не поддерживает потоки. Есть лишь библиотеки с классами-обёртками, которые используют API вызовы функций операционной системы для работы с потоками. Потоки работают исключительно на уровне операционной системы.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478837
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, есть CreateThread
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478887
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbРазобрался, есть CreateThreadтогда лучше _beginthreadex(...)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478907
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbтогда лучше _beginthreadex(...)
уверен, что у топикстартера Windows?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478909
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилCEMbтогда лучше _beginthreadex(...)
уверен, что у топикстартера Windows?
в смысле полноценная винда, а не CE
на CE - CreateThread вроде как
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39478929
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbРазобрался, есть CreateThreadЭто, как раз, функция WinAPI.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479096
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbРазобрался, есть CreateThreadЭто, как раз, функция WinAPI.

Работает на WinCE 5-7
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479867
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил странную работу сокетов - если сервер посылает 2 строку, то считывается строка, если несколько строк, то сначала сервер присылает 4 байта, а потом только донные.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479868
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗаметил странную работу сокетов - если сервер посылает 2 строку , то считывается строка, если несколько строк, то сначала сервер присылает 4 байта, а потом только донные.

если сервер посылает 1 строку
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479871
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCP сокет не обещает выдавать данные получателю теми же порциями, которыми отправлено.
Прийти может сколько угодно, а твоя задача принимать и складывать в буфер пока не получишь столько байт, сколько нужно.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479878
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479880
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TTCP сокет не обещает выдавать данные получателю теми же порциями, которыми отправлено.
Прийти может сколько угодно, а твоя задача принимать и складывать в буфер пока не получишь столько байт, сколько нужно.

Я проверял несколько раз - если одна строка, то она приходит целиком, если несколько, то сначала 4 байта, видимо это размер данных.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479881
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479883
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

Я делал буфер размером 10240, но порции он выдавал все равно по 1024
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39479885
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbт.е. надо делать 2 раза recv - первый, чтобы считать 4 байта и второй - чтобы получить данные
Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

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

Если первые 4 байта это размер данных, то сначала читаешь размер, выделяешь буфер этого размера и потом recv() до тех пор пока буфер не заполнишь.

4 байте приходят не всегда, а только когда передается несколько строк
Если у тебя обмен по TCP то ты прежде чем что-то писать должен узнать протокол обмена и писать в соответствии с ним. Бери документацию на свой сервер и читай. Эвристический анализ в таких вопросах пустая трата времени.

TCP это поток, который приходит кусками данных, размеры кусков зависят передающей среды, тут нет блоков/сообщений, есть куски, которые могут содержать как целое сообщение так и 2, 5 и 17.3 сообщения. Собирать сообщения из кусков твоя задача, как разработчика, а чтобы собирать надо знать как, т.е. протокол обмена. Единственное что гарантирует TCP - это то что данные придут в порядке отправления.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480041
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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


4 байте приходят не всегда, а только когда передается несколько строк
Если у тебя обмен по TCP то ты прежде чем что-то писать должен узнать протокол обмена и писать в соответствии с ним. Бери документацию на свой сервер и читай. Эвристический анализ в таких вопросах пустая трата времени.

TCP это поток, который приходит кусками данных, размеры кусков зависят передающей среды, тут нет блоков/сообщений, есть куски, которые могут содержать как целое сообщение так и 2, 5 и 17.3 сообщения. Собирать сообщения из кусков твоя задача, как разработчика, а чтобы собирать надо знать как, т.е. протокол обмена. Единственное что гарантирует TCP - это то что данные придут в порядке отправления.

С протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480126
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbС протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса...
Читай описаловку на этот StringList, возможно там описаны форматы обмена. Или в форуме по дельфям спроси.
Потом пиши свой класс на С++.
Может в форуме по дельфям готовый аналог для С++ подскажут.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480140
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Тсс, только про сериализацию не рассказывай!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480180
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...С протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса... В C++ Builder StringList есть.
И с Делфи/Билдер идут исходники VCL на паскале. При желании можно изучить устройство StringList.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480333
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaВ C++ Builder StringList есть.
И с Делфи/Билдер идут исходники VCL на паскале. При желании можно изучить устройство StringList.Именно так!
В Borland/Embarcadero C++ Builder всегда присутствовали все те же классы, что и в Borland/Embarcadero Delphi, причем, C++ Builder использует библиотеки в подавляющем большинстве написанные на Delphi.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39480962
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaSergey_rbпропущено...
С протоколом все понятно - сервер написан на Делфи и передает StringList.
Клиент, работавший на Дельфи, все прекрасно передает и принимает.

К сожалению, на С++ нет аналогичного класса... В C++ Builder StringList есть.
И с Делфи/Билдер идут исходники VCL на паскале. При желании можно изучить устройство StringList.

Я на С++ пишу не от хорошей жизни, а потому, что WinCE 7 перестала поддерживать VCL.

Так то Дельфи нервно курит...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485644
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос - как перевести кодировку Win-1252 в Win-1251?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485665
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВопрос - как перевести кодировку Win-1252 в Win-1251?
Никак. Это кодировка для англоязычных стран.
https://en.wikipedia.org/wiki/Windows-1252 Windows-1252 or CP-1252 is a 1 byte character encoding of the Latin alphabet, used by default in the legacy components[clarification needed] of Microsoft Windows in English and some other Western languages.
Английская часть совпадает у обоих кодировок, а русского в 1252 нет.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485676
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дельфи переводит, значит возможность есть.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485679
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbДельфи переводит, значит возможность есть.
Тогда скорее всего не переводит, т.е. просто делается предположение: "считаем эту кодировку 1251" и дальше работа как-будто это 1251.
Явно кодировка обычно никак не указывается, это просто массив байт и договоренность между писателем и читателем как этот массив трактовать.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485690
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinCE 5.0 имеет кодировку 1251 и на ней функция MultiByteToWideChar работает корректно.
но WinCE 6.0 имеет кодировку 1252 и поэтому сообщения в MessageBox выводится абракадабра.

Я вижу 2 варианта - поменять кодировку текста или программно поменять кодовую страницу WinCE 6.0
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485695
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й вариант - перегнать в UTF-8 а потом в 1251
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485696
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЯ вижу 2 варианта - поменять кодировку текста или программно поменять кодовую страницу
WinCE 6.0

А явно указать кодировку 1251 при вызове MultiByteToWideChar() вместо ACP_ANSI тебе мешает
что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485699
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЯ вижу 2 варианта - поменять кодировку текста или программно поменять кодовую страницу
WinCE 6.0

А явно указать кодировку 1251 при вызове MultiByteToWideChar() вместо ACP_ANSI тебе мешает
что?


Ни что не мешает, но не работает.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485710
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbно WinCE 6.0 имеет кодировку 1252 и поэтому сообщения в MessageBox выводится абракадабра.
Он в принципе русский понимает без юникода? Если так написать то что будет?
Код: plaintext
1.
MessageBoxA("Привет")
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485725
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbНи что не мешает, но не работает.

Чем аргументирует? "Invalid user, replace it and strike any key"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485735
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbНи что не мешает, но не работает.

Чем аргументирует? "Invalid user, replace it and strike any key"?


Просто выводит пустое сообщение и это понятно, т.к. коды символов не совпадают.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485737
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbно WinCE 6.0 имеет кодировку 1252 и поэтому сообщения в MessageBox выводится абракадабра.
Он в принципе русский понимает без юникода? Если так написать то что будет?
Код: plaintext
1.
MessageBoxA("Привет")



Сам по себе русский язык поддерживатеся.

Код: plaintext
1.
MessageBoxW (L"Привет")



Выводит сообщение корректно.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485740
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbПросто выводит пустое сообщение и это понятно, т.к. коды символов не совпадают.

Нет, это потому, что ты так и не научился проверять возвращаемое функциями значение. В морг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485744
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Он в принципе русский понимает без юникода? Если так написать то что будет?
Код: plaintext
1.
MessageBoxA("Привет")



Сам по себе русский язык поддерживатеся.

Код: plaintext
1.
MessageBoxW (L"Привет")



Выводит сообщение корректно.
Ты разницу понимаешь между A и W ? Я про А спрашивал.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485753
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВыводит сообщение корректно.
Сделай свою функцию перекодировки из 1251 в юникод и ей пользуйся.
Это массив с таблицей перекодировки wchar_t recode[256] плюс несложная функция посимвольной конвертации.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485760
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbВыводит сообщение корректно.
Сделай свою функцию перекодировки из 1251 в юникод и ей пользуйся.
Это массив с таблицей перекодировки wchar_t recode[256] плюс несложная функция посимвольной конвертации.

Хорошо тому , у кого есть отладчик, а если вместо отладчика MessageBox с абракадаброй вместо русских букв, то задача становится не такой простой.

Неужели никто не написал такой функции на с++?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485761
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbпропущено...


Сам по себе русский язык поддерживатеся.

Код: plaintext
1.
MessageBoxW (L"Привет")



Выводит сообщение корректно.
Ты разницу понимаешь между A и W ? Я про А спрашивал.

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

Сделай свою функцию перекодировки из 1251 в юникод и ей пользуйся.
Это массив с таблицей перекодировки wchar_t recode[256] плюс несложная функция посимвольной конвертации.

Хорошо тому , у кого есть отладчик, а если вместо отладчика MessageBox с абракадаброй вместо русских букв, то задача становится не такой простой.

Неужели никто не написал такой функции на с++?
Ты это на компе пиши, а не на своих девайсах. Там делов на полчаса-час: заполнить массив char значениями 1...255, отконвертировать в wchar_t с помощью MultiByteToWideChar , вывести в консоль что получилось и скопипастить в код в виде
Код: plaintext
1.
2.
3.
4.
5.
wchar_t table1251[256] = {0, ....};

wchar_t convert1251(unsigned char v) {
   return table1251[v];
}


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

Ты разницу понимаешь между A и W ? Я про А спрашивал.

A не работает, т.к. проект в Unicode.
Забей. Может потом когда-нибудь поймешь. Делай свою таблицу, как я выше написал, думаю осилишь и все у тебя заработает.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485779
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbпропущено...


Хорошо тому , у кого есть отладчик, а если вместо отладчика MessageBox с абракадаброй вместо русских букв, то задача становится не такой простой.

Неужели никто не написал такой функции на с++?
Ты это на компе пиши , а не на своих девайсах. Там делов на полчаса-час: заполнить массив char значениями 1...255, отконвертировать в wchar_t с помощью MultiByteToWideChar , вывести в консоль что получилось и скопипастить в код в виде
Код: plaintext
1.
2.
3.
4.
5.
wchar_t table1251[256] = {0, ....};

wchar_t convert1251(unsigned char v) {
   return table1251[v];
}


дальше берешь по одному символу в 1251 и конвертируешь с помощью convert1251().

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

Ты это на компе пиши , а не на своих девайсах. Там делов на полчаса-час: заполнить массив char значениями 1...255, отконвертировать в wchar_t с помощью MultiByteToWideChar , вывести в консоль что получилось и скопипастить в код в виде
Код: plaintext
1.
2.
3.
4.
5.
wchar_t table1251[256] = {0, ....};

wchar_t convert1251(unsigned char v) {
   return table1251[v];
}


дальше берешь по одному символу в 1251 и конвертируешь с помощью convert1251().

Я и пишу на компе, но запустить на нем не могу.Как ты думаешь, зачем на сайте Microsoft лежит эмулятор PocketPC с WinCE?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485815
Фотография Невезучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbпропущено...


Я и пишу на компе, но запустить на нем не могу.Как ты думаешь, зачем на сайте Microsoft лежит эмулятор PocketPC с WinCE?
Толку с него, если прога на одном терминале работает, а на другом нет.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39485879
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbХорошо тому , у кого есть отладчик, а если вместо отладчика MessageBox с абракадаброй
вместо русских букв, то задача становится не такой простой.

О чём ты? Где в сообщении "MultibyteToWideChar() returned %d, error code %d" ты видишь
русские буквы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487128
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то не понимаю

Беру один символ , перевожу в hex и получаю FFFFFFCF
Код: plaintext
1.
2.
		wsprintf(t2, L" hex = %X",  str[i]);		
       ::MessageBoxW(NULL, t2, L"cp1251toUtf8", MB_ICONEXCLAMATION | MB_OK);




Беру численный эквивалент, получаю -49
Код: plaintext
1.
2.
		wsprintf(t2, L" hex = %d",  str[i]);		
       ::MessageBoxW(NULL, t2, L"cp1251toUtf8", MB_ICONEXCLAMATION | MB_OK);



Как код символа может быть отрицательным?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487129
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это число - какой-то сдвиг вниз, например от 256 или от 127?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487145
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тип char знаковый, т.е. имеет значения -128 ... 127. Отрицательные хранятся в дополненном виде , т.е. все беззнаковые значения >127 будут выводится как отрицательные, например беззнаковое 255 будет показано как -1.

Перед использованием просто приведи к беззнаковому:
Код: plaintext
1.
wsprintf(t2, L" hex = %X",  (unsigned char)str[i]);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487162
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТип char знаковый, т.е. имеет значения -128 ... 127. Отрицательные хранятся в дополненном виде , т.е. все беззнаковые значения >127 будут выводится как отрицательные, например беззнаковое 255 будет показано как -1.

Перед использованием просто приведи к беззнаковому:
Код: plaintext
1.
wsprintf(t2, L" hex = %X",  (unsigned char)str[i]);



Получилось!

А как теперь новый код загнать в hex или в строку?

У меня есть дельфевая таблица перевода в формате:

Код: plaintext
1.
2.
3.
4.
5.
6.
    #127,               // #127
    #208#130,           // #128
    #208#131,           // #129
    #226#128#154,       // #130
    #209#147,           // #131
    #226#128#158,       // #132    
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487169
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, ни в unicode, ни в utf8 такого значения (FFFFFFCF) не может быть в принципе. Ты опять где-то накосячил!
Тут программист нужен.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487185
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbА как теперь новый код загнать в hex или в строку?
Ничего не понял. Пиши подробнее что делаешь.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487188
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rb, ни в unicode, ни в utf8 такого значения (FFFFFFCF) не может быть в принципе. Ты опять где-то накосячил!
Тут программист нужен.

unsigned char исправил ситуацию, теперь hex = CF и int = 207
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487196
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbА как теперь новый код загнать в hex или в строку?
Ничего не понял. Пиши подробнее что делаешь.

Я пишу функцию конвертации Win1251 в Win1252
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487216
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЯ пишу функцию конвертации Win1251 в Win1252
транслит что ли?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487221
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDima Tпропущено...

Ничего не понял. Пиши подробнее что делаешь.

Я пишу функцию конвертации Win1251 в Win1252
Может в юникод? Как я выше предлагал 20629335
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487223
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSergey_rbЯ пишу функцию конвертации Win1251 в Win1252
транслит что ли?

Описываю ситуацию.
На терминалах стоит WinCE, но с разными кодовыми страницами.
Если кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница 1252, от козябры.

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

транслит что ли?

Описываю ситуацию.
На терминалах стоит WinCE, но с разными кодовыми страницами.
Если кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница 1252, от козябры.

Нужна функция перевода из 1251 в 1252.

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


Описываю ситуацию.
На терминалах стоит WinCE, но с разными кодовыми страницами.
Если кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница 1252, от козябры.

Нужна функция перевода из 1251 в 1252.

в 1252 кириллица - отсутствует

В Лазаре я перевожу в utf8.
Но Лазарь умный, он умеет определять кодировку текста, т.е. если текст не utf8, то перевожу в utf8.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487354
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЕсли кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница
1252, от козябры.

Нужна функция перевода из 1251 в 1252.

Не нужна. Нужна функция перевода 1251 в Unicode. И это MultiByteToWideChar(). А тебе надо
просто правильно её вызывать. А чтобы выяснить что ты сделал неправильно, надо проверять
возвращаемый ею код ошибки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487358
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbОписываю ситуацию.
На терминалах стоит WinCE, но с разными кодовыми страницами.
Если кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница 1252, от козябры.

Нужна функция перевода из 1251 в 1252.А тупо поменять в настройках терминала кодовую страницу по умолчанию или, на худой конец, поменять значение ключа "1252" в ветке реестра WinCE
Код: plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
с "c_1252.nls" на "c_1251.nls" не судьба? Обязательно надо программу писать? А о такой функции, как setlocale ты, когда-нибудь, слышал?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487362
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВ Лазаре я перевожу в utf8.
Но Лазарь умный, он умеет определять кодировку текста, т.е. если текст не utf8, то перевожу в utf8.Функции WinAPI не понимают utf8, они понимают unicode. Улавливаешь основную мысль - UNICODE != UTF8 ?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487370
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЕсли кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница
1252, от козябры.

Нужна функция перевода из 1251 в 1252.

Не нужна. Нужна функция перевода 1251 в Unicode. И это MultiByteToWideChar(). А тебе надо
просто правильно её вызывать. А чтобы выяснить что ты сделал неправильно, надо проверять
возвращаемый ею код ошибки.


Эту функцию я как только не крутил.
Но на одной кодировке (1251) она правильно выдает русские буквы, на кодировке 1252 выдает пустоту.
Можно поиграться с первым параметром, но либо пустота, либо квадратики.
Если первым параметром поставить 1252 то выдает абракадабру, которую я и пытаюсь русифицировать
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487374
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbDimitry Sibiryakovпропущено...

Не нужна. Нужна функция перевода 1251 в Unicode. И это MultiByteToWideChar(). А тебе надо
просто правильно её вызывать. А чтобы выяснить что ты сделал неправильно, надо проверять
возвращаемый ею код ошибки.


Эту функцию я как только не крутил.
Но на одной кодировке (1251) она правильно выдает русские буквы, на кодировке 1252 выдает пустоту.
Можно поиграться с первым параметром, но либо пустота, либо квадратики.
Если первым параметром поставить 1252 то выдает абракадабру, которую я и пытаюсь русифицировать
Так делал 20583452 ? Что получилось?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487378
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbОписываю ситуацию.
На терминалах стоит WinCE, но с разными кодовыми страницами.
Если кодовая страница 1251, то русский отображается правильно, если стоит кодовая страница 1252, от козябры.

Нужна функция перевода из 1251 в 1252.А тупо поменять в настройках терминала кодовую страницу по умолчанию или, на худой конец, поменять значение ключа "1252" в ветке реестра WinCE
Код: plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
с "c_1252.nls" на "c_1251.nls" не судьба? Обязательно надо программу писать? А о такой функции, как setlocale ты, когда-нибудь, слышал?

Нет на складе специалистов, которые поменяют реестр.

setlocale почему-то не линкуется,
#include <locale.h> прописал
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487381
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbМожно поиграться с первым параметром, но либо пустота, либо квадратики.

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


Эту функцию я как только не крутил.
Но на одной кодировке (1251) она правильно выдает русские буквы, на кодировке 1252 выдает пустоту.
Можно поиграться с первым параметром, но либо пустота, либо квадратики.
Если первым параметром поставить 1252 то выдает абракадабру, которую я и пытаюсь русифицировать
Так делал 20583452 ? Что получилось?

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

Иди в Лего поиграйся. Тут программист нужен.


Так я здесь и спрашиваю совет программистов.
...
Рейтинг: 0 / 0
Какой извращенец писал 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
Какой извращенец писал MessageBoxW?
    #39487625
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раздули из мухи слона


ТС, пользуйся на здоровье


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
LPSTR StringToAnsi(LPCWSTR lpText, int nLen)
{
//------------------------------------------- конвертирует строку из UNICODE в ANSI (память освобождает вызывающая сторона)
// lpText ------------------------------------------------------------------------ UNICODE строка для преобразования в ANSI
// nLen --------------------------------------- количество символов в строке, -1 - строка заканчивается \0, посчитать самим
// LPSTR -------------------- ANSI строка эквивалентная lpText, NULL -------- ошибка, если lpText != NULL, см. GetLastError
//*************************************************************************************************************************
	if (lpText == NULL || nLen == 0)
		return NULL;													// пустая строка

	if (nLen < 0) nLen = (int)wcslen(lpText);

	LPSTR ptrResult = (LPSTR) ::malloc(nLen + 1);						// результат (освобождает тот, кто запрашивал !!)
	if (ptrResult)
	{
		::ZeroMemory(ptrResult, nLen + 1);
		if (::WideCharToMultiByte(CP_ACP, 0, lpText, nLen, ptrResult, nLen + 1, NULL, NULL) == nLen)
			return ptrResult;
			
		::free(ptrResult);
	}
	else
		::SetLastError(ERROR_OUTOFMEMORY);

	return nullptr;
}

LPWSTR StringToUnicode(LPCSTR lpText, int nLen)
{
//------------------------------------------- конвертирует строку из ANSI в UNICODE (память освобождает вызывающая сторона)
// lpText ------------------------------------------------------------------------ ANSI строка для преобразования в UNICODE
// nLen --------------------------------------- количество символов в строке, -1 - строка заканчивается \0, посчитать самим
// LPWSTR ---------------- UNICODE строка эквивалентная lpText, NULL -------- ошибка, если lpText != NULL, см. GetLastError
//*************************************************************************************************************************
	if (lpText == NULL || nLen == 0)
		return NULL;													// пустая строка

	if (nLen < 0) nLen = (int)strlen(lpText);							// определяем кол-во символов в строке

	size_t sz_mem = (nLen + 1) * sizeof(wchar_t);						// размер буфера для UNICODE строки + /00, байт
	LPWSTR ptrResult = (LPWSTR) ::malloc(sz_mem);						// результат (освобождает тот, кто запрашивал !!)
	if (ptrResult)
	{
		::ZeroMemory(ptrResult, sz_mem);
		if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)
			return ptrResult;
			
		::free(ptrResult);
	}
	else
		::SetLastError(ERROR_OUTOFMEMORY);
	
	return nullptr;
}

LPSTR StringFromUtf8A(LPCBYTE lpBlock, int cbBlock, LPINT pnLen)
{
//------------------------------------- конвертирует UTF8-блок данных в ANSI строку (память освобождает вызывающая сторона)
// lpBlock ---------------------------------------------------------------- блок данных с UTF8 символам, NULL - вернет NULL
// cbBlock------------------------------------------------------------------------ размер lpBlock в байтах, 0 - вернет NULL
// [out] pnLen --------------------------------------- длина полученной строки, символов, NULL - не возвращать длину строки
// LPSTR -------------------- ANSI строка эквивалентная lpBlock, NULL ----------- строка пуста или ошибка, см. GetLastError
//*************************************************************************************************************************
	if (lpBlock == NULL || cbBlock == 0)
		return NULL;													// пустая строка

	LPSTR	lpResult = NULL;											// результат
	int		nLen	 = 0;												// helper

	LPWSTR ptrWide = StringFromUtf8W(lpBlock, cbBlock, &nLen);		// конвертируем через преобразование в UNICODE
	if (ptrWide)
	{
		lpResult = StringToAnsi(ptrWide, nLen);
		::free(ptrWide);
	}
	
	if (pnLen) *pnLen = nLen;
	return lpResult;
}

LPWSTR StringFromUtf8W(LPCBYTE lpBlock, int cbBlock, LPINT pnLen)
{
//---------------------------------------------- конвертирует UTF8-строку в UNICODE (память освобождает вызывающая сторона)
// lpBlock ---------------------------------------------------------------- блок данных с UTF8 символам, NULL - вернет NULL
// cbBlock------------------------------------------------------------------------ размер lpBlock в байтах, 0 - вернет NULL
// [out] pnLen --------------------------------------- длина полученной строки, символов, NULL - не возвращать длину строки
// LPWSTR ---------------- UNICODE строка эквивалентная lpBlock, NULL ----------- строка пуста или ошибка, см. GetLastError
//*************************************************************************************************************************
	if (lpBlock == NULL || cbBlock == 0)
		return NULL;													// пустая строка

	LPWSTR lpResult = NULL;												// результат
	
	// запрашиваем размер необходимого буфера, символов WCHAR
	int nLen = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, (LPCCH)lpBlock, cbBlock, NULL, 0);
	if (nLen > 0)
	{
		size_t sz_mem	= (nLen + 1UL) * sizeof(WCHAR);					// размер буфера для UNICODE строки + /00, байт
		lpResult		= (LPWSTR) ::malloc(sz_mem);
		if (lpResult)
		{
			::ZeroMemory(lpResult, sz_mem);
			if (::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, (LPCCH)lpBlock, cbBlock, lpResult, nLen + 1) != nLen)
			{
				::free(lpResult); lpResult = NULL; nLen = 0;
				assert(lpResult);										// ошибка
			}
		}
		else
			::SetLastError(ERROR_OUTOFMEMORY);
	}
	if (pnLen) *pnLen = nLen;
	return lpResult;
}

LPBYTE StringToUtf8A(LPCSTR lpText, int nLen, LPINT pcbSize)
{
//------------------------- конвертирует указанную строку из кодировки ANSI в UTF-8 (память освобождает вызывающая сторона)
// lpText --------------------------------------------------------------------- строка в кодировке ANSI, NULL - вернет NULL
// nLen -------------------------------------------------------------------- длина строки lpText, символов, 0 - вернет NULL
// [out] pcbSize ------------------------------- размер возвращенного блока данных, байт, NULL - не возвращать размер блока
// LPBYTE -------------------------- эквивалентная UTF-8 строка, NULL ----------- строка пуста или ошибка, см. GetLastError
//*************************************************************************************************************************
	if (lpText == NULL || nLen == 0)
		return NULL;													// пустая строка
	
	LPWSTR ptrWide = StringToUnicode(lpText, nLen);				// конвертируем через преобразование в UNICODE
	if (ptrWide)
	{
		LPBYTE pbResult = StringToUtf8W(ptrWide, nLen, pcbSize)
		::free(ptrWide);
		return pbResult;
	}
	return nullptr;
}

LPBYTE StringToUtf8W(LPCWSTR lpText, int nLen, LPINT pcbSize)
{
//----------------------- конвертирует указанную строку из кодировки UTF-16 в UTF-8 (память освобождает вызывающая сторона)
// lpText ------------------------------------------------------------------- строка в кодировке UTF-16, NULL - вернет NULL
// nLen -------------------------------------------------------------------- длина строки lpText, символов, 0 - вернет NULL
// [out] pcbSize ------------------------------- размер возвращенного блока данных, байт, NULL - не возвращать размер блока
// LPBYTE -------------------------- эквивалентная UTF-8 строка, NULL ----------- строка пуста или ошибка, см. GetLastError
//*************************************************************************************************************************
	if (lpText == NULL || nLen == 0)
		return NULL;													// пустая строка
	
	if (nLen < 0)
		nLen = (int)_tcslen(lpText);									// подразуемавается строка заканчивающаяся /0

	LPBYTE pbResult = NULL;												// результат

	// запрашивает размер буфера для сконвертированных данных
	int nRet = ::WideCharToMultiByte(CP_UTF8, 0, lpText, nLen, NULL, 0, NULL, NULL);
	if (nRet > 0)
	{
		pbResult = (LPBYTE)::malloc(nRet);
		if (pbResult)
		{
			if (::WideCharToMultiByte(CP_UTF8, 0, lpText, nLen, (LPSTR)pbResult, nRet, NULL, NULL) != nRet)
			{
				::free(pbResult); pbResult = NULL; nRet = 0;
				assert(pbResult);										// ошибка
			}
		}
		else
			::SetLastError(ERROR_OUTOFMEMORY);
	}
	if (pcbSize) *pcbSize = nRet;
	return pbResult;
}


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

PS Sergey_rb, если будешь этот код использовать, не забудь про освобождение памяти.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487635
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TCerebrumТС, пользуйся на здоровье
У него вся проблема в том что WinCE английская и там MultiByteToWideChar() не перекодирует из 1251. Но пусть попробует.

PS Sergey_rb, если будешь этот код использовать, не забудь про освобождение памяти.

У меня получилось написать свою функцию.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487638
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum,

Вариант с
Код: plaintext
1.
if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)



не работает, т.к. зависит от кодовой страницы винды, т.к. CP_ACP = 1252.
В результате получаются иероглифы, которые я потом перевожу в русский текст через свою функцию
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487643
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

если получилось, то хорошо
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487663
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.
2.
3.
wchar_t str[4] = "ААА";

А можно вместо wchar_t использовать string?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487671
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbА можно вместо wchar_t использовать string?
Можно wstring
https://msdn.microsoft.com/en-us/library/hd5zecz6.aspx wstring A type that describes a specialization of the template class basic_string with elements of type wchar_t as a wstring.

PS Поражаюсь твоей способности оформлять посты в стиле "угадайте что я хотел сказать, сломайте себе мозг".
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487726
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПотому, что UTF8, в отличие от UNICODE, это не кодировка символов, а некий способ представления кода символа UNICODE в виде байт-последовательности переменной длины.utf8 одна из кодировок, используемых для представлению юникодных символов.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39487734
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey_rbА можно вместо wchar_t использовать string?
Можно wstring
https://msdn.microsoft.com/en-us/library/hd5zecz6.aspx wstring A type that describes a specialization of the template class basic_string with elements of type wchar_t as a wstring.

PS Поражаюсь твоей способности оформлять посты в стиле "угадайте что я хотел сказать, сломайте себе мозг".

Спасибо!
wstring - это то, что надо!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488066
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovutf8 одна из кодировок, используемых для представлению юникодных символов.А я как написал? :)
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488106
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbCerebrum,

Вариант с
Код: plaintext
1.
if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)



не работает, т.к. зависит от кодовой страницы винды, т.к. CP_ACP = 1252.
В результате получаются иероглифы, которые я потом перевожу в русский текст через свою функциюНе проще ли написать программу, которая через функции WinAPI работы с реестром будет в ветке реестра
Код: plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
менять значения ключей "ACP", "MACCP" и "OEMCP" на 1251 , 10007 и 866 соответственно, а вдобавок, на всякий случай, делать подмену кодовой страницы в значении ключа "1252" на "c_1251.nls"?
Можно вообще не париться написанием программы, а воспользоваться имеющимся инструментарием и документацией:
* Windows Embedded Compact 7: How to Use the Remote Tools Framework Without KITL or ActiveSync
* Remote Tools (Compact 2013)
* Windows Embedded 8 Technical References

Нафига насиловать моСк себе и другим написанием программы, если ты, вообще, ни разу не программист?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488112
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Код: plaintext
1.
if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)


а если вместо CP_ACP написать 1251?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488113
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНе проще ли написать программу, которая через функции WinAPI работы с реестром будет в ветке реестра
Код: plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
менять значения ключей
серьёзно?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488122
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, а в чем проблема?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488130
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devа в чем проблема?

Программу, которая убивает всю систему одним ударом, можно написать и проще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488151
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSergey_rb
Код: plaintext
1.
if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)


а если вместо CP_ACP написать 1251?

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

Вариант с
Код: plaintext
1.
if (::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, lpText, nLen, ptrResult, nLen + 1) == nLen)



не работает, т.к. зависит от кодовой страницы винды, т.к. CP_ACP = 1252.
В результате получаются иероглифы, которые я потом перевожу в русский текст через свою функциюНе проще ли написать программу, которая через функции WinAPI работы с реестром будет в ветке реестра
Код: plaintext
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
менять значения ключей "ACP", "MACCP" и "OEMCP" на 1251 , 10007 и 866 соответственно, а вдобавок, на всякий случай, делать подмену кодовой страницы в значении ключа "1252" на "c_1251.nls"?
Можно вообще не париться написанием программы, а воспользоваться имеющимся инструментарием и документацией:
* Windows Embedded Compact 7: How to Use the Remote Tools Framework Without KITL or ActiveSync
* Remote Tools (Compact 2013)
* Windows Embedded 8 Technical References

Нафига насиловать моСк себе и другим написанием программы, если ты, вообще, ни разу не программист?
Править реестр - это удел сисадминов, а не программистов.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488159
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, я в XP менял и ничего... Ну поедет у него отображение романской кодировки второй половины WIN1252 и чо? Всё равно все латинские буквы первой половины кодировки останутся на месте.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devя в XP менял и ничего... Ну поедет у него отображение романской кодировки второй половины
WIN1252 и чо?

Если у тебя сама винда с романской локализацией и половина программ на ней такая же - ты
будешь готов убить того, кто так сделает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488204
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, да плевать на романскую локализацию! Первая половина - ASCII, которой пишется английский текст, совпадает абсолютно у всех виндовых кодировок, а на национальную кодировку плевать!
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488206
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, плевать в том смысле, если этим КПК будут пользоваться не итальянцы, а русские.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488229
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, я даже на подозревал, что на С++ нет готовых функций перекодировок.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488233
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devDimitry Sibiryakov, да плевать на романскую локализацию! Первая половина - ASCII, которой пишется английский текст, совпадает абсолютно у всех виндовых кодировок, а на национальную кодировку плевать!

Можно было заморочиться и поставить WinCE 6.0 вместо WinCE 7.0 и не переписывать прогу на С++.
Но админы сказали, что это невозможно.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488268
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЧестно говоря, я даже на подозревал, что на С++ нет готовых функций перекодировок.

Есть, но они тебе не понравятся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488294
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЧестно говоря, я даже на подозревал, что на С++ нет готовых функций перекодировок.

Есть, но они тебе не понравятся.


А называются они - сделай сам?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488313
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbА называются они - сделай сам?

Не, эти я бы тебе не предлагал. Я же знаю, что ты мозг включать не в состоянии. Я имею в
виду те, что описаны на http://en.cppreference.com/w/cpp/locale
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488321
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locale предлагали.
Ниасилил.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488322
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе, эти я бы тебе не предлагал. Я же знаю, что ты мозг включать не в состоянии. Я имею в
виду те, что описаны на http://en.cppreference.com/w/cpp/locale
Топикстартер утверждает, что у него эти стандартные функции, описанные еще стандартом POSIX.1, не линкуются.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488330
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с функцией перекодировки меня устраивает больше, т.к. теперь я весь проект смогу перевести на wstring.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488334
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devИзопропил, а в чем проблема?
грязными руками лезть в реестр только потому что не удалось осилить функцию перекодировки?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488347
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилгрязными руками лезть в реестр только потому что не удалось осилить функцию перекодировки?Если не ламер и понимаешь - что/как/для чего, то можно и залезть. :) Если...
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488356
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devИзопропилгрязными руками лезть в реестр только потому что не удалось осилить функцию перекодировки?Если не ламер и понимаешь - что/как/для чего, то можно и залезть. :) Если...

Я уже писал, что на складе нет специалистов.

К тому же прога, написанная на Лазарусе, справляется с перекодировкой на ура
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488390
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devИзопропилгрязными руками лезть в реестр только потому что не удалось осилить функцию перекодировки?Если не ламер и понимаешь - что/как/для чего, то можно и залезть. :) Если...
Ламер и лезет собственно. потому как не через жопу задачу решить не может
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488446
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЯ уже писал, что на складе нет специалистов.

К тому же прога, написанная на Лазарусе, справляется с перекодировкой на ураКак думаешь, зачем существует такие программы, как pcAnywhere/RAdmin/VNC/TeamViewer/MSTSC ?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488448
Фотография Невезучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbЯ уже писал, что на складе нет специалистов.

К тому же прога, написанная на Лазарусе, справляется с перекодировкой на ураКак думаешь, зачем существует такие программы, как pcAnywhere/RAdmin/VNC/TeamViewer/MSTSC ?

Зачем?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488762
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НевезучийЗачем?Любезный, ты разделом форума не ошибся?
Ладно, отвечу - за ради "дистанционной консоли".
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488816
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНевезучийЗачем?Любезный, ты разделом форума не ошибся?
Ладно, отвечу - за ради "дистанционной консоли".

Здесь форум сисадминов?

Дистанционная консоль для терминала сбора данных, в котором всего 8мБ оперативки?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39488916
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрадывается смутное сомнение, что придется писать функцию обратной перекодировки - из юникода в 1251, т.к. функция send работает с char.
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489127
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbrdb_devпропущено...
Любезный, ты разделом форума не ошибся?
Ладно, отвечу - за ради "дистанционной консоли".
Здесь форум сисадминов?Тебе ехать или шашечки?
Sergey_rbДистанционная консоль для терминала сбора данных, в котором всего 8мБ оперативки?На складе нет подключенного к сети компьютера, к которому можно было бы подключить терминал сбора данных? Как же они данные с ТСД в офис сливают?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489274
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗакрадывается смутное сомнение, что придется писать функцию обратной перекодировки - из юникода в 1251, т.к. функция send работает с char.
функция send работает с любым байт массивом, просто, тип переменной выбран не удачно (возможно исторически так сложилось), а так можешь рассматривать ее как указатель на что угодно
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489583
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbпропущено...

Здесь форум сисадминов?Тебе ехать или шашечки?
Sergey_rbДистанционная консоль для терминала сбора данных, в котором всего 8мБ оперативки?На складе нет подключенного к сети компьютера, к которому можно было бы подключить терминал сбора данных? Как же они данные с ТСД в офис сливают ?

По Wi-Fi
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489584
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CerebrumSergey_rbЗакрадывается смутное сомнение, что придется писать функцию обратной перекодировки - из юникода в 1251, т.к. функция send работает с char.
функция send работает с любым байт массивом, просто, тип переменной выбран не удачно (возможно исторически так сложилось), а так можешь рассматривать ее как указатель на что угодно

Как отправить wstring?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489609
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак отправить wstring?
программиста нанять
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489614
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак отправить wstring?
я не использую в своей практике данный класс, поэтому, если вдруг ошибусь, меня поправят, но примерно, как-то так...

Код: plaintext
1.
2.
wstring w;
send(so, (char*)w.c_str(), (int)(w.length()  * sizeof(wchar_t)), 0);
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489943
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbПо Wi-FiТак это и есть подключение к сети - Ethernet 802.11 Чем не устраивает?
...
Рейтинг: 0 / 0
Какой извращенец писал MessageBoxW?
    #39489949
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rbПо Wi-FiТак это и есть подключение к сети - Ethernet 802.11 Чем не устраивает?

Я написал функцию перекодировки и меня все устраивает
...
Рейтинг: 0 / 0
196 сообщений из 196, показаны все 8 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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