Проблема с типом байта в дружественном имени последовательного порта в C++ с использованием набора символов unicode
Я использую SetupDiGetDeviceRegistryProperty из setupapi в Visual Studio. Если я использую набор из нескольких сочетаний клавиш, указатель байт (Byte* friendlyname используется) дает правильный friendlyname используется. Однако, когда я компилирую его с помощью набора символов Unicode, возвращаемое friendlyName имеет нулевой символ за каждым значением в массиве байтов.
Вот фрагмент кода:
SetupDiGetDeviceRegistryProperty(hDeviceInfo, &devInfoData, SPDRP_FRIENDLYNAME, nullptr, nullptr, 0, &reqSize);
BYTE* friendlyName = new BYTE[300]; //(reqSize > 1) ? reqSize : 1];
if (!SetupDiGetDeviceRegistryProperty(hDeviceInfo, &devInfoData, SPDRP_FRIENDLYNAME, nullptr, friendlyName, sizeof(friendlyName) * reqSize, nullptr))
{
// устройство не имеет этого набора свойств
memset(friendlyName, 0, reqSize > 1 ? reqSize : 1);
}
Что я уже пробовал:
Я попытался изменить массив байтов (unsigned char) на байт с теми же результатами. Если я попытаюсь изменить его на char, компилятор не будет работать.
Я также установил массив на заданный размер вместо того, чтобы позволить функции определять reqSize из-за NULL после первого символа.