vc的结构问题

dsd999 2007-03-05 04:31:42
typedef struct _SP_DEVINFO_DATA {
DWORD cbSize;
GUID ClassGuid;
DWORD DevInst;
ULONG_PTR Reserved;
} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
在vc中sizeof取得结构的大小是28。

转换到c#中
[StructLayout(LayoutKind.Sequential)]
public class SP_DEVINFO_DATA
{
public UInt32 cbSize;
public Guid ClassGuid;
public UInt32 DevInst;
public ulong Reserved;
};
SP_DEVINFO_DATA spData = new SP_DEVINFO_DATA();
spData.cbSize = (UInt32)System.Runtime.InteropServices.Marshal.SizeOf(spData);

大小为什么变成了32?
...全文
172 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2007-03-05
  • 打赏
  • 举报
回复
ref:
http://www.pinvoke.net/default.aspx/setupapi/SetupDiEnumDeviceInfo.html
dsd999 2007-03-05
  • 打赏
  • 举报
回复
SP_DEVINFO_DATA spData = new SP_DEVINFO_DATA();
spData.cbSize = (UInt32)System.Runtime.InteropServices.Marshal.SizeOf(spData);

NewDeviceInfoSet = SetupDiGetClassDevs(0, "PCI", IntPtr.Zero, DIGCF_PRESENT | DIGCF_ALLCLASSES);

SetupDiEnumDeviceInfo(NewDeviceInfoSet, RequiredSize, ref spData);

为什么这条语句执行没有成功??GetLastError返回ERROR_INVALID_USER_BUFFER,为什么,哪用错了吗?
xiaoliangwh 2007-03-05
  • 打赏
  • 举报
回复
up
王集鹄 2007-03-05
  • 打赏
  • 举报
回复
C#中long是64位也就是8个字节
ULONG_PTR是4个字节
所以上面的结构多了4个字节
32-4=28

[StructLayout(LayoutKind.Sequential)]
public class SP_DEVINFO_DATA
{
public UInt32 cbSize;
public Guid ClassGuid;
public UInt32 DevInst;
public IntPtr Reserved; //<<<<<<<
};
best8625 2007-03-05
  • 打赏
  • 举报
回复
up

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧