FormatMessage函数
我们写程序,调试出错时用的一个重要函数是 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函数相关推荐
- RegConnectRegistry函数
RegConnectRegistry函数在另一台计算机上建立到预定义注册表键的连接. LONG RegConnectRegistry(LPCTSTR lpMachineName, // 计算机名称 H ...
- RegCreateKeyEx函数
RegCreateKeyEx函数:创建指定的注册表项.如果键已经存在,函数将打开它. LONG RegCreateKeyEx(HKEY hKey, // handle to open key LPCT ...
- 对程序错误的处理——Windows核心编程学习手札之一
对程序错误的处理 --Windows核心编程学习手札之一 函数被调用执行时,先检验传递给它的各个参数的有效性,后执行任务.函数执行中若因参数无效或因某种原因导致无法正常完成函数任务,那么操作系统会返回 ...
- win32格式化错误消息
GetLastError()函数获取错误代码,是一个数字:具体错误信息需要查: 如果使用FormatMessage函数,可显示错误信息: // astdemo.cpp : 定义控制台应用程序的入口点. ...
- Windows Internals 笔记——错误处理
1.Windows函数检测到错误时,会使用一种名为"线程本地存储区"的机制将相应的错误代码与"主调线程"关联到一起.这种机制使得不同的线程能独立运行,不会出现相 ...
- COM原理与应用之COM的实现
1.COM的实现与操作系统平台密切相关 因为COM最初源于Microsoft Windows平台,所以COM实现部分(即COM库)很多地方直接用到了Windows系统的一些特性,比如系统注册表.动态连 ...
- 串口通信模块5:串口操作自定义类(2)
1.ProcessErrorMessage()函数的实现: ProcessErrorMessage()函数负责处理并提示错误信息,其实现过程如下: void CMySerial::ProcessErr ...
- Event Logging 技术简介(转载)
1. EVENT LOGGING概述 当错误发生时,系统管理员或技术支持需要知道错误原因是什么,如何恢复丢失数据和阻止错误复现. WINDOWS的Event-logging服务为此提供了解决方 ...
- Windows核心编程之核心总结(第一章 错误处理)(2018.5.26)
前沿 学习Windows核心编程是步入Windows编程殿堂的必经之路,2018年寒假重温了计算机操作系统知识,前阵子又过学习Windows程序设计方面的基础,正所谓打铁要乘热,所以我又入了Windo ...
- sql server锁异常_SQL Server中异常处理的背景
sql server锁异常 RAISERROR statement. RAISERROR语句. Figure 1 demonstrates a combination of mandatory par ...
最新文章
- 梦断代码阅读笔记03
- python3.7源码分析-字典
- HTML基础知识个人总结
- 可自动关闭的alert方法
- 引用用户控件图片无法
- C++中的二阶构造模式
- php round 取余,PHP round() 函数
- 【高并发】java JUC中的Semaphore(信号量)
- 机器视觉光源亮度应如何选择
- php 数组 判断可以吗,php判断一个数组是否为有序
- Idea全部快捷键+自行修改快捷键
- WDS+MDT全自动部署系统、自动加域、自动计算机取名(SN序列号或MAC地址)
- idea 2017 破解方法
- pillow软件 Android,Pillow自动睡眠追踪
- 券商股票程序化交易接口(转)
- VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written”
- yy号,你以为你是QQ号么?
- 蜗牛星际b款装服务器系统,蜗牛星际B款单网口折腾
- opengl 读取obj模型
- 《西游记》取经路线图|思维导图简单又漂亮
热门文章
- linux的文件系统简单介绍
- NYOJ--448--寻找最大数
- 在网上找来的几个大牛,忽然觉得自己来参加ACM倒也不是一件错误的事情,梦想总是要有的,万一成了呢。
- [Easyui - Grid]为easyui的datagrid、treegrid增加表头菜单,用于显示或隐藏列
- java 导出数据到excel
- Python——Selenium Chrome Driver配置
- 【Xamarin.iOS】使用iOS 11进行大型游戏
- 软件测试管理要素分析
- PowerDesigner之PDM(物理概念模型)
- 玩转html5(三)---智能表单(form),使排版更加方便