LPTSTR = длинный указатель на TCHAR. В современных системах (с поддержкой Unicode) это синонимом массива WCHAR.
Поскольку ваш выходной буфер будет содержать символы, каждый из которых имеет два байта, он, таким образом, совместим с UTF16.
QString имеет статический метод fromUtf16, который требует простого приведения, чтобы удовлетворить компилятор.
В этом случае мы ДОЛЖНЫ также указать общую длину всей строки. Невыполнение этого результата приводит к тому, что QString только считывает входные данные до первого нулевого символа, игнорируя любые другие данные результата.
Как только у нас на самом деле есть QString для работы, разделение просто. Вызвать метод split() QString, указав нулевой символ, заключенный в QChar.
Необязательно, и в моем случае требуется указать, что SplitBehavior as SkipEmptyParts гарантирует, что пустые строки (результат разбора нулевого символа) не окажутся в моем желаемом результате (QStringList значений).
Пример:
// The data returned by the API call.
WCHAR *rawResultData = L"Value1\0Value2\0Value3\0";
// The number of individual characters returned.
quint64 numberOfWrittenCharacters = 22;
// Create a QString from the returned data specifying
// the size.
QString rString =
QString::fromUtf16((const ushort *)rawResultData, numberOfWrittenCharacters);
// Finally, split the string into a QStringList
// ignoring empty results.
QStringList results =
rString.split(QChar(L'\0'), QString::SkipEmptyParts);
Нет, '' LPTSTR' является TCHAR * '', где TCHAR' является '' char' или wchar_t' в зависимости от условной определить. Таким образом, ваш код является неправильным. Я не понимаю, почему вы хотите использовать 'TCHAR'. Это было полезно, когда вам нужно было настроить таргетинг на систему без Юникода, например. Windows 98. Эти дни давно прошли. –
@Инспективный Исправлено, спасибо! – Andrew
@David Heffernan Когда я узнал о том, как струны были обработаны в WinAPI, я наткнулся на это: http://stackoverflow.com/questions/234365/is-tchar-still-relevant Из того, что я понял, не было фактическая ПРОБЛЕМА с использованием TCHAR, это был просто «более старый» способ делать что-то. Вы предлагаете использовать WCHAR исключительно, поскольку это современный современный стандарт? Помимо определения rawResultData как TCHAR *, что еще не так? Спасибо за вашу помощь! – Andrew