输出错误代码对应的文本

来源:互联网 发布:颈椎按摩器 知乎 编辑:程序博客网 时间:2024/05/16 15:48

有时候函数返回的错误代码,或者某个库自己定义的错误代码,只知道他们值(一般是一个DWORD类型的数据),下面介绍下通过函数来获得这些错误代码对应的文本描述。

 

分两种情况,通用的系统定义的错误代码和某个库自己定义的错误代码。

可以通过函数FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_IGNORE_INSERTS,hModule,pdhstatu,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&p_error_message,0,NULL);来获得某个错误代码的对应文本信息。

FormatMessage函数的第一个参数是一些标记(例如FORMAT_MESSAGE_FROM_SYSTEM代表要从系统的错误信息文件中查找错误代码对应的文本信息;FORMAT_MESSAGE_FROM_HMODULE表示要从一个模块中获得错误代码对应的文本信息,当FormatMessage函数的第一个参数包含FORMAT_MESSAGE_FROM_HMODULE时,FormatMessage的第二个参数就用来指定包含错误代码信息的模块的句柄;FORMAT_MESSAGE_ALLOCATE_BUFFER表示要FormatMessage()函数本身来分配存储错误代码所对应的文本信息的存储空间,这时FormatMessage()函数的第五个参数需要指定用来存放函数自身分配的存储空间的地址的地址),当FORMAT_MESSAGE_FROM_SYSTEM和FORMAT_MESSAGE_FROM_HMODULE同时存在时,程序会先从module中搜索信息,假如没搜索到,再从系统中搜索信息。

FormatMessage()函数的第二个参数用来指定包含错误代码相关信息的模块的句柄(FORMAT_MESSAGE_FROM_HMODULE标记存在的情况下),这个句柄可以用HMODULEhModule=LoadLibraryEx("Pdh.dll",NULL,LOAD_LIBRARY_AS_DATAFILE);语句来获得,加载的动态库最后需要用FreeLibrary(hModule);语句来释放。

FormatMessage()函数的第三个参数指示错误代码,这个错误代码可以是某函数的返回值,也可以用GetLastError()函数来获得(也是函数的返回值,呵呵)。

FormatMessage()函数的第四个参数指定表示错误信息文本要用的语言。

FormatMessage()函数的第五个参数是存放错误代码对应的文本的存储空间的地址的地址。

 

下面c++代码可供参考:

void display_error(DWORDpdhstatu)  //输出错误代码pdhstatus对应的文本信息
{
    HMODULE hModule;
    int error_count;
     LPVOIDp_error_message;
    hModule=LoadLibraryEx("Pdh.dll",NULL,LOAD_LIBRARY_AS_DATAFILE);
    if(hModule==NULL)
    {
         printf("hmodule is NULL\n");
         return;
     }
    error_count=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_IGNORE_INSERTS,hModule,pdhstatu,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&p_error_message,0,NULL);
    printf("%s",p_error_message);
    LocalFree(p_error_message);
    FreeLibrary(hModule);
}

 

 

 

 

 

 

 

 

原创粉丝点击