2010-01-18 4 views
0

Некоторый код:Доступ к переменной структуры двойной указатель

typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS { 
ULONG Size; 
WdfUsbTargetDeviceSelectConfigType Type; 
union { 
    struct { 
    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 
    PUSB_INTERFACE_DESCRIPTOR* InterfaceDescriptors; 
    ULONG NumInterfaceDescriptors; 
    } Descriptor; 

    struct { 
    PURB Urb; 
    } Urb; 
    } Types; 

} WDF_USB_DEVICE_SELECT_CONFIG_PARAMS, * PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS; Параметры WDF_USB_DEVICE_SELECT_CONFIG_PARAMS;

typedef struct _USB_INTERFACE_DESCRIPTOR { 
UCHAR bLength ; 
UCHAR bInterfaceClass ; 
UCHAR bInterfaceSubClass ; 
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR ; 

Способный Асесс NumInterfaceDescriptors через -> params.Types.Descriptor.NumInterfaceDescriptors

Я хочу Асесс bInterfaceClass через WDF_USB_DEVICE_SELECT_CONFIG_PARAMS. Пожалуйста, обратите внимание, что эта структура заполняется библиотекой я должен просто получить доступ к этому

+1

Я перевернул это назад, так что хотя бы код разборчиво. Пройдите дальнейшие изменения с этого момента, и когда вы сделали редактирование, проверьте, что то, что вы сделали, дает разборчивый результат! – 2010-01-18 12:12:23

+2

И помните, что то, что появляется в предварительном предварительном просмотре, НЕ обязательно будет отображаться на последней странице. – 2010-01-18 12:17:44

+0

@Neil: хорошая работа ... Я пытался пару раз, включая копирование кода во внешний редактор и уборку там, но я сдался. Мне очень тяжело расшифровывать, когда члены союза не отступают. Не ваша вина, конечно, это было довольно неприятно для начала. – unwind

ответ

2

Это появляется, что вы хотите:

ULONG iface; 

for (iface = 0; iface < params.Types.Descriptor.NumInterfaceDescriptors; iface++) 
{ 
    do_something_with(params.Types.Descriptor.InterfaceDescriptors[iface]); 
} 

..но вы должны действительно поставить еще некоторое время в делая ваши вопросы ясными, чтобы люди не могли угадать, что вы имеете в виду.

+0

ИнтерфейсDescriptors - это двойной указатель, указывающий на структуру – Sikandar

+1

Я вижу это.Определение структуры сильно означает, что это указатель на массив указателей NumInterfaceDescriptors для структур. – caf

1

Google для WDF_USB_DEVICE_SELECT_CONFIG_PARAMS. Первый удар приводит вас к соответствующей странице MSDN, которая говорит вам, что Types.Descriptor.InterfaceDescriptors

содержит указатель драйвера, поставляемые в массив USB_INTERFACE_DESCRIPTOR структур

и типы. Descriptor.NumInterfaceDescriptors действительно

содержит число элементов, которые находятся в интерфейсе массив, что указывает на типы.Descriptor.InterfaceDescriptors.

Ergo, ваш «указатель на указатель» на самом деле представляет собой массив указателей USB_INTERFACE_DESCRIPTOR.

Смежные вопросы