2010-01-18 3 views
1

ЬурейеЙ структуры _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {доступ Двойного указателя

ULONG Размер;

WdfUsbTargetDeviceSelectConfigType Type;

союз {

struct { 
    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 
    PUSB_INTERFACE_DESCRIPTOR* InterfaceDescriptors; 
    ULONG NumInterfaceDescriptors; 
} Descriptor; 
struct { 
    PURB Urb; 
} Urb; 
struct { 
    UCHAR NumberConfiguredPipes; 
    WDFUSBINTERFACE ConfiguredUsbInterface; 
} SingleInterface; 
struct { 
    UCHAR NumberInterfaces; 
    PWDF_USB_INTERFACE_SETTING_PAIR Pairs; 
    UCHAR NumberOfConfiguredInterfaces; 
} MultiInterface; 

} Типы;

} WDF_USB_DEVICE_SELECT_CONFIG_PARAMS, * PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS;

WDF_USB_DEVICE_SELECT_CONFIG_PARAMS params;

ЬурейеЙ структура _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. Обратите внимание, что эта структура заполняется библиотекой У меня есть только доступ к нему

+0

Почему вы хотите, чтобы тип IntDesc был двойным указателем? typedef PUSB_INTERFACE_DESCRIPTOR * IntDesc; Не проще ли было бы использовать один указатель? Какая польза от другого слоя косвенности здесь? –

+2

Эй, чувак ... ты изменил вопрос значительно два раза сейчас, каждый раз * разбивая ранее действительные ответы *, и каждый раз * нарушая макет, который другие исправили для вас ранее *. У меня очень мало терпения с людьми, которые небрежны с другими людьми. -1 от меня, и я не буду беспокоиться, чтобы снова отредактировать/ответить на ваш вопрос. – DevSolar

+0

О, и, кстати, это теперь дубликат для http://stackoverflow.com/questions/2085761/accessing-a-structure-variable-double-pointer – DevSolar

ответ

2
IntDesc foo; 
// somehow initialize foo to actually point to (a pointer to) a valid structure 
(*foo)->iInterface = 10; 
+1

Вы имеете в виду указатель на структуру. – 2010-01-18 06:09:54

+0

Вы правы, конечно. Я не должен брать языковые ярлыки. – DevSolar

0

почтения его как этот

(*intDesc)->iInterface 
+1

Неправильный член. Но близко. –

+0

спасибо, отредактировал :) – akif

1

IntDesc тип, а не переменная. Поэтому первое, что вам нужно сделать, это создать переменную соответствующего типа:

IntDesc id; 

Далее, вам нужно, чтобы он указывает на выделенную память. Я собираюсь поставить все на стек, вы можете иметь другие потребности:

USB_INTERFACE_DESCRIPTOR usb; 
PUSB_INTERFACE_DESCRIPTOR pusb = &usb; 
id = &pusb; 

Теперь, когда у вас есть действительный указатель, вы можете пойти вперед в разыменовании его. Поскольку это двойной указатель, вам необходимо разыменования его дважды:

(*(*id)).iInterface = 10; 

Поскольку C определяет -> как сочетание * и ., вы можете выразить, что более сжато с:

(*id)->iInterface = 10; 
1

С имя InterfaceDescriptors, оно, как представляется, указывает на массив указателей на структуру.Таким образом, более идиоматических путь будет:

InterfaceDescriptors[0]->iInterface = 10; 
0

Ваш код совершенно неправильно

NODE* ptr; 
k.N.iInterface = 100; 
ptr = (NODE*)malloc(sizeof(NODE)); 

И перед экранным:

ptr->N1->iInterface 

N1 должен быть инициализирован к чему-то.

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