• 读Windows核心编程1错误处理


    (1)错误处理

    Windows函数通常以以下几种方式表示函数调用出错:

     

    一旦函数调用出错,应立即调用GetLastError来取回错误代码。

    DWORD GetLastError()

    GetLastError返回存储于线程局部存储(TLS)的错误代码,因此多线程情况下各个线程的错误代码不会互相干扰。

    所有的错误代码可以在WinError.h中找到,每个错误都有三个相关信息:

    1. 错误消息ID(一个宏);
    2. 错误消息文本;
    3. 错误编号(应避免直接使用,应尽量使用错误消息ID)

    Visual Studio可以在Watch中监视线程错误代码和文本,只需在Watch窗口输入@err,hr

    向用户显示错误信息:

    使用FormatMessage来向用户展示错误信息,该函数可支持多种自然语言。

    DWORD FormatMessage(

        DWORD dwFlags,

        LPCVOID pSource,

        DWORD dwMessageId,

        DWORD dwLanguageId,

        PTSTR pszBuffer,

        DWORD nSize,

        va_list *arguments);

    示例代码如下:

    DWORD dwError=ERROR_PATH_NOT_FOUND; //ERROR_SUCCESS;

        HLOCAL hLocal=NULL;

        DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);

     

        BOOL fOK = FormatMessage(

            FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,

            NULL, dwError, systemLocale, (PTSTR)&hLocal, 0, NULL);

     

        If (!fOK) {

            HMODULE hDll = LoadLibraryEx(_T("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);

            If (hDll != NULL){

                fOK = FormatMessage(

                    FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,

                    NULL, dwError, systemLocale, (PTSTR)&hLocal, 0, NULL);

                FreeLibrary(hDll);

            }

        }

     

        If (fOK && (NULL != hLocal)){

            tcout<<(PCTSTR)LocalLock(hLocal)<<endl;

            LocalFree(hLocal);

        }

    自定义错误代码

    使用SetLastError可以设置我们认为合适的32错误代码

    VOID SetLastError(DWORD dwErrCode);

     

    错误代码各个字段如下:

     

    (EOF)

  • 相关阅读:
    借用构造函数实现继承
    原型链
    创建对象 之 组合使用构造函数模式和原型模式
    6.原型对象的问题
    Spring MVC
    AOP
    谈谈对Spring IOC的理解
    Mybatis3.x与Spring4.x整合(转)
    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
    Appweb写法
  • 原文地址:https://www.cnblogs.com/dlbrant/p/3099845.html
Copyright © 2020-2023  润新知