Windows核心编程笔记之错误处理
2023-09-11 14:14:04 时间
0x01 GetLastError() 函数用于获取上一个操作的错误代码
#include <Windows.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
HANDLE nFile = CreateFile(TEXT("D:\\noknow.txt"), 0, 0, NULL, OPEN_EXISTING, 0, NULL);
DWORD error = GetLastError();
cout << "错误代码: " << error << endl;
return 0;
}
输出结果为
0x02 利用 VS 小工具查看
- 利用 errlook.exe 工具查询错误代码 2 的含义
0x03 错误代码转换为相应的文本描述
#include <Windows.h>
#include <iostream>
#include <strsafe.h>
using namespace std;
void ErrorExit(LPTSTR lpszFunction);
int main(int argc, char *argv[])
{
WCHAR var_1[] = L"错误代码";
ErrorExit(var_1);
return 0;
}
void ErrorExit(LPTSTR lpszFunction)
{
// 检索最后错误码的系统错误消息
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = 123; // 模拟错误代码定义为 123
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | // 函数自动使用 LocalAlloc 函数,来为 lpBuffer 分配内存
FORMAT_MESSAGE_FROM_SYSTEM | // 定义可以使用 GetLastError 的返回值赋给 dw
FORMAT_MESSAGE_IGNORE_INSERTS, // 这个标志表示 Arguments 参数将被忽略
NULL, // 消息所在位置,这个参数类型,根据dwFlags标志来设定
dw, // 消息索引,如果 lpSource 是一个字符串,那么这个参数被忽略
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 设置为本地默认语言
(LPTSTR)&lpMsgBuf, // 接受消息字符串的内存块
0, // 内存大小
NULL); // 消息中的参数
// 显示错误消息并退出进程
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, // 将内存初始化为 0
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); // 为字符串指针区域申请足够大小的内存
StringCchPrintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf), // 目标缓冲区和目标缓冲区的大小
TEXT("%s %d 的含义是: %s"), // 格式字符串
lpszFunction, // 参数1
dw, // 参数2
lpMsgBuf); // 参数3
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf); // 释放空间
LocalFree(lpDisplayBuf);
ExitProcess(dw); // 关闭进程
}
输出的结果为,相当于 errlook.exe 小工具
设置自己的错误代码
#include <Windows.h>
#include <iostream>
using namespace std;
#define MY_ERROR 100L
void SetError(INT a);
int main(int argc, char *argv[])
{
SetError(0);
cout << GetLastError() << endl;
return 0;
}
void SetError(INT a)
{
if (a == 0) SetLastError(MY_ERROR);
}
输出结果为 100
相关文章
- QT学习笔记:windows下安装配置PyQt5
- PC-windows系统中exe调用dll搜索路径顺序
- caffe_windows安装
- 安卓源码下载 windows
- 日志监控工具安装:windows上安装elk
- Windows启动控制台登录模式
- MFC Windows 程序设计[260]之多种控件展示(附源码)
- OCR - 微软windows 11系统自带的Windows OCR功能初体验
- windows下使用tree工具打印目录树
- [Flutter] MacOS/Windows Flutter 环境走一遍
- 一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用
- 在32位Windows XP的VMWare里安装64位Ubuntu Linux/JDK1.6
- Windows之Chocolatey:windows下的apt-get即Chocolatey简介、安装、使用方法之详细攻略
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- MySQL——修改root密码的4种方法(以windows为例)
- C/C++,windows下编译报错:error C3861: “strcasecmp”: 找不到标识符
- Python .py 文件打包成 .exe 文件(Windows平台,python 3.x)