首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetLastError 127

GetLastError 127
EN

Stack Overflow用户
提问于 2012-05-29 02:22:30
回答 2查看 4.5K关注 0票数 1

为什么下面的代码总是输出127 (“找不到指定的过程。”)即使它找到"firefox.exe“并成功终止它??

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-29 02:37:13

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

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

因此,在您的示例中,根据OpenProcess的MSDN文档,如果失败,该函数将返回NULL。因此,如果OpenProcess返回的不是NULL,则无需查看GetLastError

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

票数 4
EN

Stack Overflow用户

发布于 2012-05-29 02:51:12

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

这是Windows API中的一种常见模式,GetLastError通常只有在函数失败时才有效。( GetFileSize、GetFileType等函数需要调用GetLastError判断返回值是否合法)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10788904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档