访问双指针
typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS {
ULONG尺寸;
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参数;
typedef struct _USB_INTERFACE_DESCRIPTOR {
UCHAR bLength;
UCHAR bInterfaceClass;
UCHAR bInterfaceSubClass;
} USB_INTERFACE_DESCRIPTOR,* PUSB_INTERFACE_DESCRIPTOR;
能够通过 – > params.Types.Descriptor.NumInterfaceDescriptors访问NumInterfaceDescriptors
我想通过WDF_USB_DEVICE_SELECT_CONFIG_PARAMS访问bInterfaceClass。 请注意,这个结构由我必须访问它的库填充
(*someIntDesc)->iInterface
IntDesc foo; // somehow initialize foo to actually point to (a pointer to) a valid structure (*foo)->iInterface = 10;
IntDesc是一种类型,而不是变量。 所以你需要做的第一件事就是创建一个正确类型的变量:
IntDesc id;
接下来,您需要让它指向已分配的内存。 我要把所有东西放在堆栈上,你可能有其他需求:
USB_INTERFACE_DESCRIPTOR usb; PUSB_INTERFACE_DESCRIPTOR pusb = &usb; id = &pusb;
既然你有一个有效的指针,你可以继续取消引用它。 由于这是一个双指针,您需要将其解除引用两次:
(*(*id)).iInterface = 10;
因为C定义->
作为*
和的组合.
,你可以更简洁地表达:
(*id)->iInterface = 10;
从名称InterfaceDescriptors
,它似乎指向结构的指针数组。 所以更惯用的方式是:
InterfaceDescriptors[0]->iInterface = 10;
像这样尊重它
(*intDesc)->iInterface
你的代码非常错误
NODE* ptr; kNiInterface = 100; ptr = (NODE*)malloc(sizeof(NODE));
在访问之前:
ptr->N1->iInterface
N1应初始化为某种东西。