FILGROUPDESCRIPTOR розмір fgd

Дивлячись на FILEGROUPDESCRIPTOR

http://msdn.microsoft .com/en/us/library/windows/desktop/bb773290% 28v = vs.85% 29.aspx

cItems = Кількість елементів у fgd

однак розмір fgd фіксується в 1 в декларації struct, так що точка cItems?

0
Чому це не може бути FILEDESCRIPTOR * fgd?
додано Автор Ali, джерело
Класичний C не підтримує масивів змінних розмірів, тому розмір фіктивного розміру 1 використовується для декларування.
додано Автор Raymond Chen, джерело
Тому що це формат буфера обміну. Уявіть, що станеться, якщо ви кладете FILEDESCRIPTOR * fgd в буфер обміну.
додано Автор Raymond Chen, джерело

1 Відповіді

Це загальний шаблон, який використовується для динамічного розподілу елементів:

int items = 5;
int cb = sizeof(FILEGROUPDESCRIPTOR) + (items - 1) * sizeof(FILEDESCRIPTOR);
LPFILEGROUPDESCRIPTOR lp = (LPFILEGROUPDESCRIPTOR)new BYTE[cb];
lp->cItems = items;
for(int i = 0; i < items; i++)
{
    lp->fgd[i].blah = blah;
}
3
додано