Windows错误代码转换为错误信息

成功解决pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。') 成功解决pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。') 目录 解决问题 解决思路 解决方法 解决问题 pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。') 解决思路 Pywin类型,错误 解决方法... 阅读详情

在调用一个API函数以后,如果函数失败,通常可以紧接着调用另一个API函数“GetLastError”来返回一个错误代码,下面这个类可以根据Windows定义的错误代码,查找到用文字表示的错误信息:

00001: #ifndef _YHB_SYSERROR_INCLUDED_
00002: #define _YHB_SYSERROR_INCLUDED_
00003:
00004: #include <stdexcept>
00005: #include <string>
00006:
00007: namespace yhb {
00008:
00009: class SysError
00010: : public std::runtime_error
00011: {
00012: public:
00013: SysError(int err=0)
00014: : runtime_error(makeMsgFromErrorNum(err))
00015: {}
00016: SysError(const char *customMsg, int err = 0)
00017: : runtime_error(makeMsgFromErrorNum(customMsg, err))
00018: {}
00019: static std::string makeMsgFromErrorNum(unsigned err = 0);
00020: static std::string makeMsgFromErrorNum(const char *customMsg, unsigned err = 0);
00021: };
00022:
00023: } // end of namespace
00024:
00025: #endif

SysError从std::runtime_error派生,因此可以被抛出并被作为std::exception捕获。

如果不想使用异常,也可以用它的两个静态方法来返回错误信息。

实现

00001: #include "StdAfx.h"
00002: #include "./SysError.h"
00003: #include <sstream>
00004: #include <LMErr.h>
00005:
00006: #define WIN32_LEAN_AND_MEAN
00007: #include <Windows.h>
00008:
00009: using namespace std;
00010:
00011: namespace yhb {
00012:
00013: /************************************************************************
00014: 管理用LoadLibrary()加载的模块句柄
00015: ************************************************************************/
00016: class Module {
00017: public:
00018: explicit Module(HMODULE handle=0)
00019: : handle_(handle)
00020: {}
00021: ~Module() {
00022: free();
00023: }
00024: Module & operator = (HMODULE handle) {
00025: free();
00026: handle_ = handle;
00027: return *this;
00028: }
00029: bool isValid() const { return 0!=handle_; }
00030: operator HMODULE() const { return handle_; }
00031: private:
00032: Module(const Module &);
00033: Module & operator = (const Module &);
00034: void free() {
00035: if (0!=handle_) {
00036: ::FreeLibrary(handle_);
00037: handle_ = 0;
00038: }
00039: }
00040: HMODULE handle_;
00041: };
00042:
00043: /************************************************************************
00044: SysError
00045: ************************************************************************/
00046: string SysError::makeMsgFromErrorNum(unsigned err/* =0 */) {
00047: if (0==err) {
00048: err = GetLastError();
00049: if (NOERROR==err)
00050: return "no error!";
00051: }
00052: Module module;
00053: DWORD flag = FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM;
00054: if (err >= NERR_BASE && err <= MAX_NERR) {
00055: module = LoadLibraryExA("netmsg.dll", 0, LOAD_LIBRARY_AS_DATAFILE);
00056: if (module.isValid())
00057: flag |= FORMAT_MESSAGE_FROM_HMODULE;
00058: }
00059: char buf[1024];
00060: if (FormatMessageA(flag, static_cast<HMODULE>(module),
00061: err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
00062: buf, sizeof(buf), 0))
00063: {
00064: return buf;
00065: } else {
00066: ostringstream os;
00067: os << "Unknown error: " << err << " (0x" << hex << err << ')';
00068: return os.str();
00069: }
00070: }
00071:
00072: string SysError::makeMsgFromErrorNum(const char *customMsg, unsigned err/* =0 */) {
00073: string result(customMsg);
00074: result += ' ';
00075: result += makeMsgFromErrorNum(err);
00076: return result;
00077: }
00078:
00079: } //end of namespace

C++里一种比较常用的方法,是将资源封装成一个类,在析构的时候释放该资源,比如上面的Module,析构的时候调用FreeLibrary。

Mfc_Vs2015_GetLasstError错误码对应文本信息转换器 立即下载

相关推荐

pgpool-II安装部署

文章介绍了pgpool-II的核心功能、架构组成以及实际部署的关键配置步骤

weixin_41690116的博客 1424

WinInet 错误代码 (12001 - 12156 )

以下是从微软查找的wininet的函数错误码简介 http://support.microsoft.com/kb/193625 Microsoft Win32 互联网 (WinInet) API 提供了独立的应用程序方便地访问 Gopher、 FTP 和 HTTP 等标准的互联网协议。WinInet API 将抽象为 Win32 开发人员熟悉的高级别接口协议。 以下是 WinInet 函数所返回的错误代码的列表: Code Error Message and Des..

积累点滴,保持自我 2106

HyperLynx VX2.5 实战:5分钟搞定LPDDR4X内存的批量仿真与报告分析

本文详细介绍了如何使用HyperLynx VX2.5进行LPDDR4X内存的批量仿真与报告分析,通过智能网络分组和并行计算技术,5分钟内即可完成全流程验证。文章涵盖工程准备、批量仿真配置、报告解析及典型问题解决方案,帮助工程师高效提升PCB仿真效率,确保移动设备内存接口的稳定性与性能。

weixin_42683394的博客 401

Windows API 编程----将错误代码转换成错误描述信息

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

weixin_34018202的博客 163

暗月项目七详解

本文围绕“暗月靶场项目七”展开,记录了一次从外网 Web 入口逐步深入内网并最终获取域控目标的完整实训过程。

Re_K123的博客 416

无GPS室内飞行:基于PX4与MID360的FAST-LIO定点悬停实战解析

本文详细解析了基于PX4飞控与大疆MID360激光雷达的无GPS室内飞行技术,重点介绍了FAST-LIO算法在定点悬停中的应用。通过硬件配置、软件环境搭建、坐标系转换等实战经验,帮助开发者解决室内定位难题,实现精准悬停与稳定飞行。

weixin_29056781的博客 262

解决pywintypes.error: (2, ‘LoadLibraryEx‘, ‘系统找不到指定的文件。‘)

在本文中,我们解决了一个常见的Python Windows平台下的问题——​​pywintypes.error: (2, 'LoadLibraryEx', '系统找不到指定的文件。')​​。通过使用​​工具,我们可以确定缺失的DLL文件,并将其添加到我们的程序中。这样,我们就可以成功解决这个问题了。​​是Windows操作系统提供的一个API函数,它用于加载一个动态链接库(DLL)文件到当前的进程空间中,从而使得进程能够使用DLL文件中所提供的函数。

牛肉胡辣汤 1365

OTN传送网实战指南:从光层到电层的完整架构解析(附配置示例)

本文深入解析OTN传送网从光层到电层的完整架构,涵盖关键组件、技术实现及配置示例。通过高速公路与光传送网的类比,详细介绍了光层超宽传输管道构建、电层业务调度核心引擎以及控制平面智能运维实战。附有典型组网方案与故障排查指南,助力网络工程师高效部署与维护OTN传送网。

tomato的博客 683

Windows错误代码转换成文字信息描述

//错误代码转换成文字信息 //@param:error_code:错误代码 //@return:返回文字描述信息 std::wstring getErrorMessage(DWORD error_code) { std::wstring error_str_info; wchar_t error_str[256]; error_str[0] = L'\0'; ::FormatMessag...

MusicMan 972

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

高性能算力中心 — RDMA — Overview

目录 文章目录目录RDMA基于以太网的 RoCE/RDMA 计算优化NVMeNVMe Over Fabrics基于以太网的 NVMe 存储优化 RDMA RDMA(Remote DMA,远程直接内存访问)是一种新的内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过 CPU 耗时的处理。RDMA 将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA 技术的原理及其与 TCP/IP 架构的对比如下图所示。 InfiniBand(IB):从一开始就支持 R

烟云的计算 2365

MFC获取错误代码

使用下面的函数获取错误代码:GetLastError()但是这个函数只能得到错误代码,并不能得到具体的错误信息,想要得到具体的错误信息,需要这个函数:FormatMessge(),具体这个函数怎么使用,可以去查函数定义或者百度;在Microsoft Visual Studio中,可以使用Watch(监视)窗口查看错误代码和错误的文本描述;具体的做法如下:在Watch(监视)窗口中选择一行,并且输入...

修罗的博客 1503

YOLO26核心模块解析:SimSPPF轻量化空间金字塔池化的原理与优势详解

SimConv作为现代深度学习的基础构建块,其设计虽然简洁,但包含了多项关键技术的有机组合。通过将卷积、批量归一化和激活函数整合为统一模块,SimConv不仅提供了稳定的训练特性和良好的表达能力,还为后续更复杂网络架构的发展奠定了基础。SimConv的成功在于其体现了深度学习设计的核心理念:简洁性与有效性的平衡。它证明了通过合理的技术组合,可以在不显著增加复杂度的前提下大幅提升模型性能。随着深度学习技术的持续发展,SimConv及其变种将继续作为重要的基础组件,推动计算机视觉和人工智能技术的进步。

know_F0727的博客 2618

windows核心编程第一章:ErrorShow.cpp

本章对错误信息的处理VOID SetLastError(DWORD dwErrCode) : 如果我在自己写的程序中检测到一个错误 , 我可能希望向用户显示文本描述,而不是显示个干巴巴的错误编号。Windows提供了一个函数,可以将错误代码转换为相应的文本描述此函数名为FormatMessage,如下所示 : ```cppFormatMessage的功能实际相当丰富,为了构造要向用户显示的字符串,它是首选的一种方式。

zhyjhacker的博客 290

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

FormatMessage获取错误代码描述

大家都知道获取错误代码用GetLastError,但是它返回的是错误标识,不是描述,我们可以用FormatMessage将其转换为本地语言的错误描述。FormatMessage的具体解释可以查看API的帮助。unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 =

bdmh的专栏 2244

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c++学习之:根据GetLastError()返回值获取错误信息

VC中GetLastError()获取错误信息的使用在VC中编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。 可问题是,GetLastError()返回的只是一个双字节数值(DWORD)。OH,MY GOD!目前Win32的出错编号已经从...

weixin_30604651的博客 241

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GetLastError与FormatMessage联用得到出错原因

通常,在写WINDOWS程序的时候我们会用 GetLastError()来获得错误代号,进而想要知道具体出错原因(文本描述),我们可以用 FormatMessage 函数来得到。  下面示例一段代码。  1  2 /*  3 利用F

1431

揪出Windows Vista蓝屏的真正幕后原因

玩Windows操作系统,没有比蓝屏更痛苦的了,蓝屏从Windows诞生以来就存在了。曾经发表过一篇文章:Vista蓝屏代码含义和解决方案,里面列举出了近40个常见的蓝屏错误和详细解释。但是,很多朋友反映说,他们的蓝屏代码,在这...

crazybug1987的专栏 375

GetLastError()获取的数字转换成字符串(string)

 https://blog.youkuaiyun.com/seanbill/article/details/80460115  ------GetLastError()的返回值对比查询 #include "pch.h" #include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;string&gt; #include &lt;atlc...

qq_34227896的博客 1万+

Windows核心编程 错误处理

为了指出错误,只需设置线程上的一个错误代码,令自己的函数返回合适值即可。使用函数SetLastError(DWORD); 使用GetLastError()得到上一个函数出错代码,($err,hr可直接在watch1中看到出错信息) 使用FormatMessage(...)将错误代码转换为字符串信息: 一个error lookup小程序: voidCWindowsErrorLooku

fztfztfzt的专栏 361

Windows核心编程学习笔记一

 1.   当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-local storage)的机制,将相应的错误代码号码与调用的线程关联起来。这将使线程能够互相独立地运行,而不会影响各自的错误代码。当函数返回时,它的返回值就能指明一个错误已经发生。若要确定这是个什么错误,请调用DWORD GetLastError();2.   错误表示法:消息ID,消息

元昌图像 499

《Windows核心编程》第一讲 对程序错误的处理

一个Windows函数通常都有一个有意义的返回值类型,它标志着这个函数的运行状态,即函数运行成功与否。windows常用的函数类型如下图: 从系统内部来讲,当一个Windows函数检测到一个错误时,它会使用一个成为线程本地存储器(thread-local storage)的机制,将相应的错误代码号码与调用的线程关联起来。因此线程之间能够相互独立地运行,而不会影响各自的错误代码。若要确定函数...

weixin_34342905的博客 74

GetLastError() 显示错误信息

LPVOID lpMsgBuf;  FormatMessage(  FORMAT_MESSAGE_ALLOCATE_BUFFER |  FORMAT_MESSAGE_FROM_SYSTEM |  FORMAT_MESSAGE_IGNORE_INSERTS,  NULL,  GetLastError(),  MAKELANGID(LANG_NEUTRAL, SUBLANG_

u010439291的专栏 824

显示标准COM ActiveX Win32的错误信息

LPVOID lpMsgBuf;  FormatMessage(    FORMAT_MESSAGE_ALLOCATE_BUFFER |    FORMAT_MESSAGE_FROM_SYSTEM |    FORMAT_MESSAGE_IGNORE_INSERTS,   NULL,   GetLastError(),//错误的消息代码 DWORD类型   MAKELANGID(LANG_NEUT

358

获取windows系统错误

//Returns the last Win32 error, in string format. Returns an empty string if there is no error. #ifdef UNICODE std::wstring GetSysError(DWORD errCo...

chengxiechen1739的博客 433

《解读Windows 核心编程》 之 FormatMessage()的用法

FormatMessage是一个Windows API函数。它的功能就是将GetLastError函数得到的错误信息(这个错误信息是数字代号)转化成字符串信息的函数。 DWORD WINAPI FormatMessage ( DWORD dwFlags, // source and processing options

编辑编辑器 2606
上一篇: 因果关系、INUS定义和SUPPES定义
下一篇: 专毒自己人的“民族性”
SeaWave
博客等级 码龄27年 117粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值