Windows API 编程----将错误代码转换成错误描述信息
Windows编程有时会因为调用函数而产生错误,调用GetLastError()函数可以得到错误代码。如果错误代码为0,说明没有错误;如果错误代码不为0,则说明存在错误。
而错误代码不方便编程人员或用户直观理解到底发生了什么错误。Visual Studio 2015(或之前的版本)提供了“错误查找”的外部工具,输入错误代码即可以查看到底发生了什么错误。


如果想在程序代码中查看错误代码对应的错误信息,可以编写如下函数来实现:
#include<iostream>
#include<Windows.h>
using namespace std;
void winerr( ); int main(int argc, char* argv[])
{
system("haha");
winerr();
system("pause");
return ;
} void winerr( )
{
char* win_msg = NULL;
DWORD code = GetLastError();
if (code == )
{
cout << "error "<<code<<":No error!\n";
return;
} else
{
//获取错误信息
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&win_msg, , NULL);
if (win_msg != NULL)
{
cout << "error " << code <<":" << win_msg << endl;
LocalFree(win_msg);
}
}
//为了使得该函数的调用不影响后续函数调用GetLastError()函数的结果
SetLastError(code);
}
测试结果:

Windows API 编程----将错误代码转换成错误描述信息的更多相关文章
- FormatMessage将错误代码转换成对应的字符串
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int _tmain(int argc, _T ...
- windows核心编程-第一章 对程序错误的处理
第一章-对程序错误的处理 在开始介绍Microsoft Windows 的特性之前,必须首先了解 Wi n d o w s的各个函数是如何进行错误处理的. 当调用一个Wi n d o w s函数时,它 ...
- 浅谈Windows API编程
WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程 ...
- Windows API编程(SDK编程)配置VS2017——出现LNK 2019错误的win32项目如何解决
最近刚入门SDK编程,在 我终于知道为什么windowsApi学的人这么少了 这篇文章中,确实发现了这样的问题,我的教程使用VS2013->Windows桌面->win32,就诞生了能使用 ...
- Windows核心编程:第1章 错误处理
Github https://github.com/gongluck/Windows-Core-Program.git //第1章 错误处理.cpp: 定义应用程序的入口点. // #include ...
- 《Windows核心编程》第1章——错误处理
GetLastError: GetLastError返回错误编码,即便出错函数后边跟随一个正确执行了的函数,也不会覆盖原先的错误代码: 考虑多线程的情况.子线程中的错误代码不会被主线程捕获: 但是子函 ...
- Windows API 编程-----DLL编程之禁止加载自己
和可执行文件一样,动态链接库也有自己的入口地址,如果系统或者当前进程的某个线程调用LoadLibrary函数加载或者使用FreeLibrary卸载该动态链接库的时候,会自动使用3个特定的堆栈参数跳转到 ...
- Windows API 编程入门
Windows 工作原理的中心思想就是“动态链接”概念.Windows 自身带有一大套函数,应用程序就是通过调用这些函数 来实现它的用户界面和在屏幕上显示文本和图形的.这些函数都是在动态链接库里实现的 ...
- Windows API编程(一)完整的示范程序
## #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数; int APIEN ...
随机推荐
- 04day->python列表和元祖
一.列表 1.索引.切片 索引:根据索引值获取,里表里的值 切片:和字符串相似 2.增 1)append(object),在列表的末端添加 2)insert(index ...
- css样式之标签的查找
css的组成部分:选择器和声明 css的注释: /*这是注释*/ <!DOCTYPE html> <html lang="zh-CN"> <head& ...
- [软件工程]项目选择与NABCD模型分析
项目 内容 这个作业属于哪个课程 2019春季计算机学院软件工程(罗杰) 这个作业的要求在哪里 团队项目选择 这课程的目标是 以实践形式熟悉软件开发流程,团队开发,合作学习 本次作业对课程的帮助是 确 ...
- redis实现 msetex和 getdel命令
1.redis本身不提供 msetex命令(批量增加key并设置过期时间) class RedisExtend { private static final Logger logger = Logge ...
- Python的html解析器
转自https://blog.csdn.net/jqh2002_blog/article/details/24842217 其实比较不同的解析器对html的处理能力是有点麻烦的,因为它们处理的步骤并不 ...
- C语言中malloc函数与free函数
- malloc函数 全称是memory allocation,中文叫动态内存分配,用于申请一块连续的.指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑 ...
- VS2010,VS2012,VS2015等的自动提示不能默认选中的功能解决办法
很简单,只需要按 ctrl+alt+space 即可切换. 蛋疼,我到底为什么总会不小心切换过去,而且每次都记不住这个快捷键切换回来...
- MySQL where 表达式
where 条件表达式 对记录进行过滤,如果没有指定where子句,则显示所有记录. 在where表达式中,可以使用MySQL支持的函数或运算符.
- django notes 一:开篇
公司 web 框架用的是 django, 以前没用过,打算这两周好好看看. 边学习边整理一下笔记,加深理解. 好像谁说过初学者更适合写入门级的教程,我觉得有一定道理. 高手写的教程有一定深度,不会写入 ...
- 更新jdk后 Light Table无法找到新版本jdk的bin目录
原来是lein构建工具中保存了原来jdk版本记录,就是这个profiles文件 原来jdk1.7.0_17 我现在改成如下图jdk1.7.0_40 问题解决