Исходная строка CStringW
, а не CAtlStringW
, которая является базовым классом. Используйте CA2W
и CW2A
для преобразования между UTF8 и UTF16.
#include <Windows.h>
#include <atlstr.h>//Visual Studio specific
...
CStringA utf8 = CW2A(L"മലയാളം", CP_UTF8);
CStringW utf16 = CA2W(utf8, CP_UTF8);
MessageBoxW(0, utf16, 0, 0);
Вы можете разыграть utf8
до const char*
. Или приведите utf16
к const wchar_t*
.
Это не доступный для записи буфер. Не произносите CAtlStringW
или CStringW
на wchar_t*
, и, конечно, не char*
, что совершенно неправильно.
Для записываемого буфера используйте метод CString::GetBuffer
/ CString::ReleaseBuffer
. Или выделить новый буфер для передачи. Убедитесь, что исходный код компилируется с нулевыми предупреждениями.
Вы можете переключиться на UTF16, если API-интерфейсы C используются исключительно Windows. Используйте wchar_t
вместо char
, используйте версию функции "широкая строка C", например wcscpy
вместо strcpy
.
void get_ble_list(wchar_t **deviceNames)
{
...
wcscpy(...);
}