如何分配SP_DEVICE_INTERFACE_DETAIL_DATA?(How to allocate SP_DEVICE_INTERFACE_DETAIL_DATA?)
SP_DEVICE_INTERFACE_DETAIL_DATA是一个可变长度结构,从包含其大小的字段开始,后跟一个数组(不是指向一个数组的指针)。
分配具有所需数组长度的结构的便捷方法是什么?
SP_DEVICE_INTERFACE_DETAIL_DATA is a variable-length structure, beginning with a field containing its size followed by an array (not a pointer to one).
What is a convenient way to allocate this structure with a desired array length?
最满意答案
我像MSalters建议的那样做了:
std::vector<char> rawbuf(sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + bufferlen); SP_DEVICE_INTERFACE_DETAIL_DATA* pDIDD = reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(&rawbuf[0]);编辑:
按照Raymond Chen的例子(也在他的博客上讨论过),我可以按如下方式分配SP_DEVICE_INTERFACE_DETAIL_DATA结构:
PSP_DEVICE_INTERFACE_DETAIL_DATA pDIDD = malloc(FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA, DevicePath[bufferlen]));I did it like MSalters suggested:
std::vector<char> rawbuf(sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + bufferlen); SP_DEVICE_INTERFACE_DETAIL_DATA* pDIDD = reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(&rawbuf[0]);Edit:
Following Raymond Chen's example (as also discussed on his blog) I could allocate the SP_DEVICE_INTERFACE_DETAIL_DATA structure as follows:
PSP_DEVICE_INTERFACE_DETAIL_DATA pDIDD = malloc(FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA, DevicePath[bufferlen]));更多推荐
发布评论