我读了这两个关于每个“函数”功能的解释,虽然它们看起来是相同的,但它们不输出相同的值:
dw尺寸:
“结构的大小,以字节为单位。”
尺寸:
“sizeof(x) 返回变量或类型 x 占用的内存量(以字节为单位)”
我的代码:
PROCESSENTRY32 entry;
cout >> entry.dwSize >> endl;
cout >> sizeof(entry) >> endl;
为什么
entry.dwSize
和 sizeof(entry)
打印时得到的值不一样?根据上面的描述,它们都应该给我条目的大小(以字节为单位)。
来自 PROCESSENTRY32 的 MSDN 文档:
dw尺寸
结构体的大小,以字节为单位。在调用 Process32First 函数之前,请将此成员设置为 sizeof(PROCESSENTRY32)。如果不初始化 dwSize,Process32First 会失败。
因此
dwSize
应该等于 sizeof(PROCESSENTRY32)
,但是创建 struct
不会初始化其成员,因此在设置它们之前,所有成员中都会有垃圾。
当您创建一个结构时,它要么用 0 字节初始化,要么随机初始化。当你查看docs时,你会发现在使用它之前你必须自己填写dwSize。
你混淆了两个完全不相关的事情。
PROCESSENTRY32::dwSize
是一个数据字段,you 应该将其初始化为接收者 PROCESSENTRY32
结构的大小。您有责任将其设置为正确的值。它不会神奇地自行设置。
即你应该做的
PROCESSENTRY32 entry;
entry.dwSize = sizeof entry;
...
在尝试将
entry
传递给任何 WinAPI 函数之前。
这就是文档所说的意思,
dwSize
是“结构的大小,以字节为单位”。