powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
25 сообщений из 196, страница 2 из 8
Какой извращенец писал 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
25 сообщений из 196, страница 2 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой извращенец писал MessageBoxW?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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