Winapi ListView_GetItemText неверный формат вывода

я использую ListView_GetItemText сюда:

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048]; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
LPWSTR itemtxt = buffer; //Create LPWSTR var

stringstream s;
s << itemtxt;
MessageBoxA(NULL, s.str().c_str(), NULL, NULL);

Sleep(7000); //Sleep because this piece of code is inside a While loop

Функция MessageBox показывает это:

введите описание изображения здесь

Что мне нужно, это получить весь текст строки, но, кажется, я получаю шестнадцатеричную строку …

0

Решение

std::stringstream лечит wchar_t* указатель как общий указатель и, таким образом, хранит значение указателя вместо символов, на которые он указывает.

Если вы хотите использовать MessageBoxAнужно конвертировать wchar_t данные в ANSI.

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
char buffer_ansi[2048 * 2] = {0};
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function
WideCharToMultiByte(CP_ACP, 0, buffer, -1, buffer_ansi, sizeof(buffer_ansi), NULL, NULL);

stringstream s;
s << buffer_ansi;
MessageBoxA(NULL, s.str().c_str(), NULL, 0);

Обновление: вы не должны использовать NULL за четвертый аргумент MessageBoxA, который не является указателем.


Обновление 2: вместо преобразования строки в ANSI, используя std::wstringstream вместо std::stringstreamи позвоните MessageBoxW() вместо MessageBoxA(),

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function

std::wstringstream s;
s << buffer;
MessageBoxW(NULL, s.str().c_str(), NULL, 0);

Примечание: у вас есть комментарий «Буфер инициализации», поэтому инициализировать буфер.


Обновление 3: или просто не используйте std::wstringstream совсем.

int count = ListView_GetItemCount(procmon_lv); //Get Items count
wchar_t buffer[2048] = {0}; //Init buffer
ListView_GetItemText(procmon_lv, count-1, 0, buffer, 2048); //Call function

MessageBoxW(NULL, buffer, NULL, 0);
1

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

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

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