c++ - 如何分配SP_DEVICE_INTERFACE_DETAIL_DATA?

标签 c++ winapi struct memory-management

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

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

最佳答案

我按照 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]));

关于c++ - 如何分配SP_DEVICE_INTERFACE_DETAIL_DATA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882086/

相关文章:

c++ - macOS High Sierra 10.13 上损坏的 c++ 标准库

c++ - WinMain 的返回值

c++ - QML无框窗支持aero snap

c - 如何实现继承: error: conflicting declaration ‘typedef struct

java - OpenCL 库和绑定(bind)

c++ - 在 vector 中编写线程安全

c++ - 在 netbeans 中将 C++ 代码输出为汇编语言

c++ - 尝试确定打印机状态总是为离线和在线打印机返回 0

C 编译器忽略 'static' 的结构声明

c - 在 C 中从 typedef 结构设置和获取数组的值