Как выделить SP_DEVICE_INTERFACE_DETAIL_DATA? - PullRequest
1 голос
/ 25 октября 2011

SP_DEVICE_INTERFACE_DETAIL_DATA - это структура переменной длины, начинающаяся с поля, содержащего его размер, за которым следует массив (не указатель на единицу).

Как удобно выделить эту структуру с желаемой длиной массива?

1 Ответ

0 голосов
/ 25 октября 2011

Я сделал это так, как предложил 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]);

Редактировать:

По примеру Рэймонда Чена (как также обсуждалось в его блоге ) Я мог бы выделить структуру SP_DEVICE_INTERFACE_DETAIL_DATA следующим образом:

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