我们写程序,调试出错时用的一个重要函数是 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. 梦断代码阅读笔记03
  2. python3.7源码分析-字典
  3. HTML基础知识个人总结
  4. 可自动关闭的alert方法
  5. 引用用户控件图片无法
  6. C++中的二阶构造模式
  7. php round 取余,PHP round() 函数
  8. 【高并发】java JUC中的Semaphore(信号量)
  9. 机器视觉光源亮度应如何选择
  10. php 数组 判断可以吗,php判断一个数组是否为有序
  11. Idea全部快捷键+自行修改快捷键
  12. WDS+MDT全自动部署系统、自动加域、自动计算机取名(SN序列号或MAC地址)
  13. idea 2017 破解方法
  14. pillow软件 Android,Pillow自动睡眠追踪
  15. 券商股票程序化交易接口(转)
  16. VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written”
  17. yy号,你以为你是QQ号么?
  18. 蜗牛星际b款装服务器系统,蜗牛星际B款单网口折腾
  19. opengl 读取obj模型
  20. 《西游记》取经路线图|思维导图简单又漂亮

热门文章

  1. linux的文件系统简单介绍
  2. NYOJ--448--寻找最大数
  3. 在网上找来的几个大牛,忽然觉得自己来参加ACM倒也不是一件错误的事情,梦想总是要有的,万一成了呢。
  4. [Easyui - Grid]为easyui的datagrid、treegrid增加表头菜单,用于显示或隐藏列
  5. java 导出数据到excel
  6. Python——Selenium Chrome Driver配置
  7. 【Xamarin.iOS】使用iOS 11进行大型游戏
  8. 软件测试管理要素分析
  9. PowerDesigner之PDM(物理概念模型)
  10. 玩转html5(三)---智能表单(form),使排版更加方便