C++ GetProcessAffinityMask返回空进程关联
在一个非常简单的测试控制台应用程序中,我尝试获取进程的关联掩码: 编辑此代码不正确。问题解决了。请检查评论和验证答案C++ GetProcessAffinityMask返回空进程关联,c++,c,winapi,C++,C,Winapi,在一个非常简单的测试控制台应用程序中,我尝试获取进程的关联掩码: 编辑此代码不正确。问题解决了。请检查评论和验证答案 #include <cstdlib> #include <cstdio> #include <windows.h> int main() { while (1) { DWORD dwProcessAffinityMask = 0; DWORD dwSystemAffinityMask = 0;
#include <cstdlib>
#include <cstdio>
#include <windows.h>
int main()
{
while (1)
{
DWORD dwProcessAffinityMask = 0;
DWORD dwSystemAffinityMask = 0;
BOOL res = GetProcessAffinityMask(
GetCurrentProcess(),
(PDWORD_PTR)&dwProcessAffinityMask,
(PDWORD_PTR)&dwSystemAffinityMask);
printf("%d 0x%X 0x%X\n",
res,
dwProcessAffinityMask,
dwSystemAffinityMask);
Sleep(1000);
}
return 0;
}
在我的笔记本电脑上运行,它有一个2核CPU,生成的系统掩码看起来是正确的。但是我不理解这里得到的dwProcessAffinityMask
值的含义。出于这个原因,我还试图通过更改进程的关联掩码来玩弄任务管理器,但输出保持不变
此行为似乎不正确。传递
DWORD\u PTR
变量的地址,而不是DWORD
变量的地址
DWORD_PTR dwProcessAffinityMask;
DWORD_PTR dwSystemAffinityMask;
并移除这些铸型。它们清楚地表明了问题所在。当编译器报告您正在传递类型不匹配的参数时,请更正类型,而不是抑制错误。编译器已经告诉您出了什么问题,您只需要学习如何解释它的消息 你应该传递一个指向
DWORD\u PTR
的指针,而不是一个指向DWORD
的指针。该死,你说得对!我是一只黑猩猩!现在测试正常了。是什么让你写(PDWORD\u PTR)
而没有想到“嗯,也许这是错的,我应该仔细检查一下”@immibis我在阅读文档时被这个DWORD\u PTR和LPDWORD\u PTR的东西弄糊涂了。另外,原始代码来自一个32位的应用程序,这就是为什么这个bug在移植到64位之前从未出现的原因。我必须记住,在没有实际检查的情况下,不要复制/粘贴来自第三方的代码。谢谢
DWORD_PTR dwProcessAffinityMask;
DWORD_PTR dwSystemAffinityMask;