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 ...
最新文章
- Python自动化测试(1)-自动化测试及基本技术手段概述
- UNIX:描述符和文件结构
- highcharts学习1----Line charts
- linux批量管理服务,通过PSSH批量管理Linux服务器
- python legend位置_关于matplotlib-legend 位置属性 loc 使用说明
- Psych101(part7)--Day7
- 揭秘Python并发编程——协程
- webserver 交互方式说明
- android仿饿了么筛选,Android仿饿了么搜索功能
- 系列文章--SharePoint 2013 开发教程
- 《羊了个羊》创始人被母校制成展牌
- Spring Boot入门教程(三十七):支付宝集成-手机网站支付
- 【工具】解决Windows7影音制作的错误:C946001E
- 【Javascript】length属性
- 小时代3刺金时代好看吗?
- 微信支付(p11-p20)
- 聊聊ClickHouse中的低基数LowCardinality类型
- 驾照科目一速过技巧--2023年
- 仿抖音--将图片转化成对应的字符图片
- 数据人之苦,你造吗?(转自知乎)
热门文章
- Kubernetes详解(二十五)——Deployment控制器扩容
- AWD-Yunnan-Simple_WriteUp
- 使用windows 命令行创建一个空的文本文件
- k8s 1.16安装metrics server
- 杭电计算机14年笔试真题
- BZOJ2157旅游——树链剖分+线段树
- Vquery PHP 简单爬虫类
- python 2 版本中的input() 和 raw_input() 函数的比较
- 用iostat对linux硬盘IO性能进行检测
- iOS下载文件,保存路径. 防止加到iCloud备份