PMG
http://forum.pmg.org.ru/

Кодировка при разработке проекта
http://forum.pmg.org.ru/viewtopic.php?f=4&t=7965
Страница 1 из 1

Автор:  _Dok_ [ 29 апр 2010 08:43 ]
Заголовок сообщения:  Кодировка при разработке проекта

У меня возникла такая проблема с приводом одних данных к типу других при разработке проекта.
Это проблема конечно из-за малого практического опыта программировании на С++ (я пишу в основном на Delphi, C# в последнее время),
проблемы следующего характера:

Предложим, для примера, я хочу добавить в ComboBox строку, функция:

void Combo_ItemAdd( ULONG ComboID, LPVOID pData, LPCTSTR pStrDesc )
{
HWND hwndCtrl = GetDlgItem( m_hWnd, ComboID );
DWORD dwItem = ComboBox_AddString( hwndCtrl, pStrDesc );
ComboBox_SetItemData( hwndCtrl, dwItem, pData );
}

В качестве передаваемого значения (самого текста) я использую тип LPCTSTR.
При использовании:
.....
D3DADAPTER_IDENTIFIER9 Identifier;
.....
Combo_ItemAdd(IDC_COMBO_ADAPTER, (LPVOID)pAdapter, (LPCTSTR)Identifier.Description);
.....

Параметр Identifier.Description типа char, я его пытаюсь привести к LPCTSTR и заполнить поле в ComboBox`е.
В результате там пишутся квадратики и нули.

Подскажите, как решить такую проблему с переводом из различных типов в другие?

И соответственно возникает вопрос:
по вашему мнению, при разработке проектов (в частности игровых) какой пользоваться кодировкой Unicode или Multi-Byte?
Кодировка устанавливается, если не ошибаюсь "Character Set" изменить с "Use Unicode Character Set" на "Use Multi-Byte Character Set".

Автор:  MagicWolf [ 29 апр 2010 13:58 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Лучше UNICODE. Проблема скорее всего в том, что Identifier.Description в формате byte, а надо в unicode. Перевод можно сделать разными методами, но в любом случае через промежуточный буфер.

Автор:  _Dok_ [ 29 апр 2010 14:04 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Параметр Identifier.Description типа char. Это точно.
Даже через MessageBox(...) проверил, всё выводится отлично. А вот с переводом проблемка.

Автор:  MagicWolf [ 29 апр 2010 14:37 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Да в этом дело. Почитай http://www.firststeps.ru/mfc/steps/r.php?179 в принципе там понятно написано...

Автор:  _Dok_ [ 29 апр 2010 14:55 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Ну вариант такой если использовать модуль atlstr.h и класс CString.
Тогда всё работает нормально.
Спасибо.

Автор:  MagicWolf [ 01 май 2010 20:02 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Можно вот так:
Код:
#define W_B(w, a, cb)     WideCharToMultiByte(                              \
                                               CP_ACP,                      \
                                               0,                           \
                                               w,                           \
                                               -1,                          \
                                               a,                           \
                                               cb,                          \
                                               NULL,                        \
                                               NULL)

#define B_W(a, w, cb)     MultiByteToWideChar(                              \
                                               CP_ACP,                      \
                                               0,                           \
                                               a,                           \
                                               -1,                          \
                                               w,                           \
                                               cb)

Автор:  _Dok_ [ 04 май 2010 08:16 ]
Заголовок сообщения:  Re: Кодировка при разработке проекта

Спасибо, MagicWolf. Попробую.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/