Невозможно преобразовать char [33] в LPCTSTR или, если я приведу тип в LPCTSTR, желаемые результаты не получаются

Я пытаюсь использовать listbox.Addstring(); в приложении MFC, которое будет принимать LPCTSTR,
Я передаю переменную char массив длиной 33 символа.

ListBox.AddString(Adapter_List->pScanList->network[0].szSsid);

SzSsid объявлен как char szSsid[33];

Я сталкиваюсь с двумя проблемами:

1) если я приведу LPCTSTR лайк

ListBox.AddString( (LPCTSTR ) Adapter_List->pScanList->network[0].szSsid );

Я не получаю правильный вывод — отображаются некоторые китайские иероглифы. Я знаю, что это какая-то проблема с Unicode, но я не разбираюсь в Unicode.

2) если я не приведу тип, я получаю сообщение об ошибке

Невозможно преобразовать char [33] в LPCTSTR

Я пытаюсь создать приложение MFC, которое будет отображать все точки доступа. В szSsid Я могу видеть имена точек доступа.

3

Решение

LPCTSTR приведение типов просто неправильно. Вы можете использовать ATL конвертер помощников лайк CA2T конвертировать из char строка в TCHAR (LPCTSTR) строка или CA2W конвертировать из char строка в Unicode UTF-16 wchar_t строка; например.:

// CA2T - Uses the TCHAR model (obsolete)
ListBox.AddString( CA2T(Adapter_List->pScanList->network[0].szSsid) );

или же:

// CA2W - Conversion to Unicode UTF-16 (wchar_t) string
// More modern approach.
ListBox.AddString( CA2W(Adapter_List->pScanList->network[0].szSsid) );

Но, что более важно, что такое кодирование используется вашим char szSSid[] строка? Вы можете указать этот кодирующий идентификатор (например, CP_UTF8 для струн UTF-8) в CA2W конструктор nCodePage параметр для правильного преобразования в Unicode UTF-16 строка передается AddString() метод.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]