我们写程序,调试出错时用的一个重要函数是 GetLastError(),它会返回一个非负数字给我们,在VS的工具--错误查找里面看相应的描述。

今天看《Windows核心编程》时,发现一个FormatMessage函数,能够自动将错误代码转换成汉语或英语描述,所以参考书上的例子,自己实现了一下。

也可以把其中的子函数嵌入其他程序中,出错的时候,直接调用自己写的函数,不用再去工具里面查看了。

这是函数原型

DWORD
WINAPI
FormatMessageW(_In_     DWORD dwFlags,_In_opt_ LPCVOID lpSource,_In_     DWORD dwMessageId,_In_     DWORD dwLanguageId,_Out_    LPWSTR lpBuffer,_In_     DWORD nSize,_In_opt_ va_list *Arguments);

  代码是一些死知识,没有什么需要理解的地方,记录下来就行了。

#include "stdafx.h"#include <Windows.h>
#include <iostream>
using namespace std;void Search();int main()
{setlocale(LC_ALL, "Chinese-simplified");  //汉语显示Search();return 0;
}void Search()
{DWORD dwError = 0;printf("请输入要查找的错误号码:\r\n");cin >> dwError;HANDLE LocaleHandle = NULL;   // MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)          汉语// MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)       英语DWORD LocaleSystem = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);  //   获得文本描述//   typedef int  BOOL;BOOL bOk = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL, dwError, LocaleSystem,(PTSTR)&LocaleHandle, 0, NULL);if (!bOk){// 可能是网络错误HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);if (hDll != NULL){bOk = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS |FORMAT_MESSAGE_ALLOCATE_BUFFER,hDll, dwError, LocaleSystem,(PTSTR)&LocaleHandle, 0, NULL);FreeLibrary(hDll);}}if (bOk && (LocaleHandle != NULL)){LPVOID v1 = LocalLock(LocaleHandle);printf("错误类型描述: %ls\r\n", v1);LocalFree(LocaleHandle);}else{MessageBox(0, L"No text found for this error number.", 0, 0);}
}

  

转载于:https://www.cnblogs.com/kekoukele987/p/7543469.html

FormatMessage函数相关推荐

  1. RegConnectRegistry函数

    RegConnectRegistry函数在另一台计算机上建立到预定义注册表键的连接. LONG RegConnectRegistry(LPCTSTR lpMachineName, // 计算机名称 H ...

  2. RegCreateKeyEx函数

    RegCreateKeyEx函数:创建指定的注册表项.如果键已经存在,函数将打开它. LONG RegCreateKeyEx(HKEY hKey, // handle to open key LPCT ...

  3. 对程序错误的处理——Windows核心编程学习手札之一

    对程序错误的处理 --Windows核心编程学习手札之一 函数被调用执行时,先检验传递给它的各个参数的有效性,后执行任务.函数执行中若因参数无效或因某种原因导致无法正常完成函数任务,那么操作系统会返回 ...

  4. win32格式化错误消息

    GetLastError()函数获取错误代码,是一个数字:具体错误信息需要查: 如果使用FormatMessage函数,可显示错误信息: // astdemo.cpp : 定义控制台应用程序的入口点. ...

  5. Windows Internals 笔记——错误处理

    1.Windows函数检测到错误时,会使用一种名为"线程本地存储区"的机制将相应的错误代码与"主调线程"关联到一起.这种机制使得不同的线程能独立运行,不会出现相 ...

  6. COM原理与应用之COM的实现

    1.COM的实现与操作系统平台密切相关 因为COM最初源于Microsoft Windows平台,所以COM实现部分(即COM库)很多地方直接用到了Windows系统的一些特性,比如系统注册表.动态连 ...

  7. 串口通信模块5:串口操作自定义类(2)

    1.ProcessErrorMessage()函数的实现: ProcessErrorMessage()函数负责处理并提示错误信息,其实现过程如下: void CMySerial::ProcessErr ...

  8. Event Logging 技术简介(转载)

    1.     EVENT LOGGING概述 当错误发生时,系统管理员或技术支持需要知道错误原因是什么,如何恢复丢失数据和阻止错误复现. WINDOWS的Event-logging服务为此提供了解决方 ...

  9. Windows核心编程之核心总结(第一章 错误处理)(2018.5.26)

    前沿 学习Windows核心编程是步入Windows编程殿堂的必经之路,2018年寒假重温了计算机操作系统知识,前阵子又过学习Windows程序设计方面的基础,正所谓打铁要乘热,所以我又入了Windo ...

  10. sql server锁异常_SQL Server中异常处理的背景

    sql server锁异常 RAISERROR statement. RAISERROR语句. Figure 1 demonstrates a combination of mandatory par ...

最新文章

  1. Python自动化测试(1)-自动化测试及基本技术手段概述
  2. UNIX:描述符和文件结构
  3. highcharts学习1----Line charts
  4. linux批量管理服务,通过PSSH批量管理Linux服务器
  5. python legend位置_关于matplotlib-legend 位置属性 loc 使用说明
  6. Psych101(part7)--Day7
  7. 揭秘Python并发编程——协程
  8. webserver 交互方式说明
  9. android仿饿了么筛选,Android仿饿了么搜索功能
  10. 系列文章--SharePoint 2013 开发教程
  11. 《羊了个羊》创始人被母校制成展牌
  12. Spring Boot入门教程(三十七):支付宝集成-手机网站支付
  13. 【工具】解决Windows7影音制作的错误:C946001E
  14. 【Javascript】length属性
  15. 小时代3刺金时代好看吗?
  16. 微信支付(p11-p20)
  17. 聊聊ClickHouse中的低基数LowCardinality类型
  18. 驾照科目一速过技巧--2023年
  19. 仿抖音--将图片转化成对应的字符图片
  20. 数据人之苦,你造吗?(转自知乎)

热门文章

  1. Kubernetes详解(二十五)——Deployment控制器扩容
  2. AWD-Yunnan-Simple_WriteUp
  3. 使用windows 命令行创建一个空的文本文件
  4. k8s 1.16安装metrics server
  5. 杭电计算机14年笔试真题
  6. BZOJ2157旅游——树链剖分+线段树
  7. Vquery PHP 简单爬虫类
  8. python 2 版本中的input() 和 raw_input() 函数的比较
  9. 用iostat对linux硬盘IO性能进行检测
  10. iOS下载文件,保存路径. 防止加到iCloud备份