如何分配SP_DEVICE_INTERFACE_DETAIL_DATA?

时间:2011-10-24 21:16:30

标签: c++ winapi struct memory-management

SP_DEVICE_INTERFACE_DETAIL_DATA是一个可变长度的结构,从包含其大小的字段开始,后跟一个数组(不是指向一个数组的指针)。

使用所需的数组长度分配此结构的简便方法是什么?

1 个答案:

答案 0 :(得分:-1)

我做的就像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的例子(也讨论on his blog),我可以按如下方式分配SP_DEVICE_INTERFACE_DETAIL_DATA结构:

PSP_DEVICE_INTERFACE_DETAIL_DATA pDIDD =
   malloc(FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA, 
                       DevicePath[bufferlen]));