GetLastError 127

为什么下面的代码总是打印出127(“指定的程序找不到”),即使find“firefox.exe”并终止成功?

#include<Windows.h> #include <TlHelp32.h> #include<iostream> using namespace std; int main( int, char *[] ) { PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if (Process32First(snapshot, &entry) == TRUE) { while (Process32Next(snapshot, &entry) == TRUE) { if (_tcscmp(entry.szExeFile, TEXT("firefox.exe")) == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); DWORD d = GetLastError(); cout<<d<<'\n'; TerminateProcess(hProcess,0); CloseHandle(hProcess); } } } CloseHandle(snapshot); return 0; } 

检查GetLastError 之前,您需要检查特定函数的返回值。

GetLastError将始终返回由API函数设置的最后一个错误代码。 但是,并不是所有的函数都会在成功时设置最后的错误代码。 所以GetLastError的结果可能是在程序的其他部分设置的错误代码。

所以在你的情况下,根据OpenProcess的MSDN文档,如果失败,函数将返回NULL 。 因此,如果OpenProcess返回的不是NULL则不需要查看GetLastError

请注意,最后一个错误代码对于当前线程唯一的。

如果函数失败,则返回值为NULL。 要获得扩展错误信息,请调用GetLastError。

这是Windows API中的常见模式,GetLastError通常只在函数失败时才有效…(一些像GetFileSize和GetFileType这样的函数要求您调用GetLastError来判断返回的值是否有效)