я хочу получить wlan_intf_opcode_bss_type
с помощью WlanQueryInterface
функция.
Мой код:
PDOT11_BSS_TYPE wlanInterfaceState = NULL;
DWORD wlanInterfaceStateSize = sizeof(wlanInterfaceState);
DWORD interfaceStateResult;
interfaceStateResult = WlanQueryInterface(hClient, &pIfInfo->InterfaceGuid, wlan_intf_opcode_bss_type, NULL, &wlanInterfaceStateSize, (PVOID *)&wlanInterfaceState, NULL);
if (interfaceStateResult != ERROR_SUCCESS) {
qDebug() << "Error";
} else {
qDebug() << wlanInterfaceState;
}
Я получаю шестнадцатеричные значения. Когда я использую переключатель для перечисления на wlanInterfaceState
Я получаю ошибку:
error: C2450: switch expression of type 'PDOT11_BSS_TYPE' is illegal
Обновить:
DOT11_BSS_TYPE
Синтаксис перечисления из MSDN:
typedef enum _DOT11_BSS_TYPE {
dot11_BSS_type_infrastructure = 1,
dot11_BSS_type_independent = 2,
dot11_BSS_type_any = 3
} DOT11_BSS_TYPE, *PDOT11_BSS_TYPE;
Как использовать эти перечисления на wlanInterfaceState
?
Благодарю.
Проблема была в том, что я использую указатель wlanInterfaceState
версия, поэтому использование его с ключом не считается правильным выражением.
Переключатель (условие) заявление
условие — любое выражение целочисленного или перечислимого типа, или типа класса, контекстуально неявно преобразуемого в целочисленный или перечислимый тип, или объявление единственной переменной, не являющейся массивом, такого типа с инициализатором скобки или равенства.
Поскольку он указывает на enum, мне нужно разыменовать его.
Таким образом, оператор switch должен выглядеть так:
switch (*wlanInterfaceState) {
case dot11_BSS_type_infrastructure:
qDebug() << "Infastructure";
break;
case dot11_BSS_type_independent:
qDebug() << "Independent";
break;
case dot11_BSS_type_any:
qDebug() << "Any";
break;
default:
qDebug() << "Unknown";
}
Других решений пока нет …