2010-01-18 118 views
1

typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {访问双指针

ULONG Size;

WdfUsbTargetDeviceSelectConfigType类型;

工会{

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;

typedef结构_USB_INTERFACE_DESCRIPTOR {

UCHAR bLength;

UCHAR bInterfaceClass;

UCHAR bInterfaceSubClass;

} USB_INTERFACE_DESCRIPTOR,* PUSB_INTERFACE_DESCRIPTOR;

能够通过接取NumInterfaceDescriptors - > params.Types.Descriptor.NumInterfaceDescriptors

我想通过WDF_USB_DEVICE_SELECT_CONFIG_PARAMS接取bInterfaceClass。 请注意,这种结构是由库充满我刚刚访问

+0

为什么你想IntDesc类型是一个双指针? typedef PUSB_INTERFACE_DESCRIPTOR * IntDesc; 只用一个指针会更容易吗?这里另一层间接的好处是什么? – 2010-01-18 07:07:35

+2

嘿,伙计们......你们现在已经大大改变了这个问题两次,每次都打破以前的有效答案,每次都打破别人以前为你们修复的布局。对于那些对别人时间不注意的人,我很少有耐心。 -1,我不会再编辑/回答你的问题。 – DevSolar 2010-01-18 13:49:15

+0

哦,顺便说一句,这是现在重复http://stackoverflow.com/questions/2085761/accessing-a-structure-variable-double-pointer – DevSolar 2010-01-18 13:54:19

回答

4
(*someIntDesc)->iInterface 
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 2010-01-18 08:21:18

0

尊重它像这样

(*intDesc)->iInterface 
+1

错误的成员。但接近。 – 2010-01-18 05:46:09

+0

谢谢,编辑:) – akif 2010-01-18 06:09:13

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

而且accesing前:

ptr->N1->iInterface 

N1应该被初始化的东西。