自定义错误码 Windows

1. 简要

通常情况下Windows函数在执行失败时会返回一个错误代码,此错误代码是一个32位的错误编号。

由于错误编号是一个全局的变量,所以在不同的线程获取这个变量时,可能会获取到别的线程的错误,但Windows在使用GetLastError()函数时会使用到"线程本地存储(thread-local-storage)"机制来保证获取错误码时的正确性。

在一个Windows API(api1)调用结束后需要立即调用GetLastError,若在执行另一个API(api2)后调用GetLastError获取到的将不是api1返回的错误码,如下图:
在这里插入图片描述
也可以在调试下的监视窗口中输入"$err,hr"获取当前线程的错误码

2. 自定义错误码

Windows还提供了自定义错误码的功能,只需在线程中设置上一个错误码即可,设置上一个错误码需要调用SetLastError(),自定义错误代码要遵循Windows的错误代码定义规则,32错误代码的规则如下:
在这里插入图片描述

3. 将错误代码转换为文本字符串

/*
DWORD FormatMessage(
	// 格式化选项,以及如何解释 lpSource 参数。 dwFlags 的低位字节指定函数如何处理输出缓冲区中的换行符。 低位字节还可以指定格式化输出行的最大宽度。
	DWORD   dwFlags,
	// 消息定义的位置。 此参数的类型取决于 dwFlags 参数中的设置
	LPCVOID lpSource,
	// 错误码, 如果 dwFlags 包含 FORMAT_MESSAGE_FROM_STRING,则忽略此参数
	DWORD   dwMessageId,
	// 语言ID
	DWORD   dwLanguageId,
	// 消息缓冲区
	LPTSTR  lpBuffer,
	// 缓冲区大小
	DWORD   nSize,
	// 通常为空,在自定义格式化显示(如:"%1,%2",这里的%1就是占位符)的时候有用到
	va_list *Arguments
);
*/
// 获取当前语言环境
DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
// 转换后的消息
HLOCAL hlocal = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER,
	0, dwError, systemLocale,
	(PTSTR) &hlocal, 0, NULL);

关注「CoderPro」公众号,专注于分享.NET/C++知识及算法的大本营,新手公众号请大家多多关照/(ㄒoㄒ)/~~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值