Cobra91151 Cobra91151 - 9 months ago 25
C++ Question

WlanQueryInterface data enumeration

I want to get

wlan_intf_opcode_bss_type
using
WlanQueryInterface
function.

My code:

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;
}


I get hexadecimal values. When I use switch to enumerate on
wlanInterfaceState
I get error:

error: C2450: switch expression of type 'PDOT11_BSS_TYPE' is illegal


Update:
DOT11_BSS_TYPE
enumeration syntax from 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;


How to use these enumerations on
wlanInterfaceState
?
Thanks.

Answer Source

The problem was that I use the pointer wlanInterfaceState version, so using it with switch is not considered correct expression.

Switch (condition) statement

condition - any expression of integral or enumeration type, or of a class type contextually implicitly convertible to an integral or enumeration type, or a declaration of a single non-array variable of such type with a brace-or-equals initializer.

Since it points to enum, then I need to dereference it.

So the switch statement should look like this:

 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";
         }