Tag: memory alignment

为PInvoke正确声明SP_DEVICE_INTERFACE_DETAIL_DATA

SP_DEVICE_INTERFACE_DETAIL_DATA结构: typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA { DWORD cbSize; TCHAR DevicePath[ANYSIZE_ARRAY]; } SP_DEVICE_INTERFACE_DETAIL_DATA, *PSP_DEVICE_INTERFACE_DETAIL_DATA; 如何在C#中声明它以使Marshal.SizeOf正常工作? 我没有分配动态缓冲区的问题。 我只想以适当的非硬编码方式计算cbSize 。 PInvoke.net的定义是错误的。 PInvoke.net的解释也是错误的: SP_DEVICE_INTERFACE_DETAIL_DATA didd = new SP_DEVICE_INTERFACE_DETAIL_DATA(); didd.cbSize = 4 + Marshal.SystemDefaultCharSize; // trust me 🙂 不要相信他。 4 + Marshal.SystemDefaultCharSize仅在x86上有效。 sizeof(int) + Marshal.SystemDefaultCharSize 。 在x64上,它失败了。 这是非托管C ++给出的: 86 结构尺寸A: 5 设备路径偏移A: 4 结构尺寸W: 6 设备路径W的偏移量: 4 64位 结构尺寸A: 8 […]