我应该如何在 C++ 中正确使用 FormatMessage()?

2023-12-14

Without:

  • MFC
  • ATL

我该如何使用FormatMessage()获取错误文本HRESULT?

 HRESULT hresult = application.CreateInstance("Excel.Application");

 if (FAILED(hresult))
 {
     // what should i put here to obtain a human-readable
     // description of the error?
     exit (hresult);
 }

这是从系统返回错误消息的正确方法HRESULT(在本例中名为 hresult,或者您可以将其替换为GetLastError()):

LPTSTR errorText = NULL;

FormatMessage(
   // use system message tables to retrieve error text
   FORMAT_MESSAGE_FROM_SYSTEM
   // allocate buffer on local heap for error text
   |FORMAT_MESSAGE_ALLOCATE_BUFFER
   // Important! will fail otherwise, since we're not 
   // (and CANNOT) pass insertion parameters
   |FORMAT_MESSAGE_IGNORE_INSERTS,  
   NULL,    // unused with FORMAT_MESSAGE_FROM_SYSTEM
   hresult,
   MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
   (LPTSTR)&errorText,  // output 
   0, // minimum size for output buffer
   NULL);   // arguments - see note 
   
if ( NULL != errorText )
{
   // ... do something with the string `errorText` - log it, display it to the user, etc.

   // release memory allocated by FormatMessage()
   LocalFree(errorText);
   errorText = NULL;
}

这与大卫哈纳克的答案之间的主要区别是使用FORMAT_MESSAGE_IGNORE_INSERTS旗帜。 MSDN 对于如何使用插入有点不清楚,但是Raymond Chen 指出你永远不应该使用它们当检索系统消息时,因为您无法知道系统期望哪些插入。

FWIW,如果您使用 Visual C++,您可以通过使用_com_error class:

{
   _com_error error(hresult);
   LPCTSTR errorText = error.ErrorMessage();
   
   // do something with the error...

   //automatic cleanup when error goes out of scope
}

据我所知,它不是 MFC 或 ATL 的直接一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何在 C++ 中正确使用 FormatMessage()? 的相关文章

  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 条件类型定义

    如果我有一小段这样的代码 template
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 将键码转换为相关的显示字符

    在 C Windows Forms 项目中 我有一个不提供 KeyPressed 事件的控件 它是一个 COM 控件 ESRI 映射 它仅提供 KeyUp 和 KeyDown 事件 包含关键事件参数 http msdn microsoft
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • PHP 下载脚本在 Mac 上创建不可读的 ZIP 文件

    作为参考 我已经阅读并尝试了这些和其他几个线程中的答案 使用 php 创建和提供压缩文件 打开下载的 zip 文件会创建 cpgz 文件吗 我的服务器上有一个 zip 文件 当我使用 Filezilla 将该 Zip 文件从我的服务器移动到
  • 是否可以在类级别为不同的数据类型配置 Jackson 自定义反序列化器?

    我需要反序列化一个又长又复杂的json 我为此编写了一组java类来映射数据 并且我必须为许多不同类型的字段编写自定义反序列化器 包括String Boolean BigDecimal等 我知道我可以使用相应的自定义反序列化器注释 java
  • 如何在 C# WPF 应用程序中切换图像?

    我正在尝试制作一个应用程序 可以在硬币的正面标志和硬币的反面图像之间切换 但是 每次我按下 正面 按钮或 反面 按钮时 都会发生错误 如何修复我的代码以便图像成功切换 XAML
  • spring-mvc:如何以“a/b/{c}”的形式映射URI模板?

    我可以获得 a b 或 a b 形式的 URI 模板来工作 但是 当我尝试 a b c 时 我收到 HTTP 404 和日志中的一条消息 其形式为 未找到带有 URI myapp a b c 的 HTTP 请求的映射 但是我在日志中也看到了
  • 获取双 SIM 卡 Android 手机的运营商详细信息

    我正在开发一个应用程序 我需要用户 SIM 卡的详细信息 他的电话号码 IMEI 号码和运营商 到目前为止我已经获得了他的 IMEI 号码这个答案 他的设备是单卡还是双卡 我如何获取他的 SIM 卡号码以及这两个连接的运营商名称 试试这个
  • 如何查找 Java 字符串是否包含 X 或 Y 并包含 Z

    我很确定正则表达式是可行的方法 但每当我尝试计算出特定的正则表达式时 我就会头疼 如果 Java 字符串 包含文本 ERROR 或文本 WARNING AND 包含文本 parsing 其中所有匹配项都不区分大小写 我需要查找什么正则表达式
  • 如何使用 phpseclib 设置自定义 SFTP 端口

    我必须使用 PHP 连接到 SFTP 服务器 我正在使用 phpseclib 来实现这一点 我在 Internet 上找到了一些示例 但无法连接到 SFTP 我使用自定义端口 2222 连接到 SFTP 请告诉我在哪里可以定义自定义端口来连
  • 尝试在 Autodesk Forge / Bim360 中显示房间信息

    Okay so I m trying to show room information and geometry from a Revit project on Forge I ve made the call to https devel
  • 在 R 编程神经网络中为 nnet 指定“初始权重”

    在 R 编程中 我试图了解如何使用 nnet 让用户指定初始权重而不是默认值来运行神经网络算法 R 文档提到了以下参数 有如何使用权重的例子吗 nnet formula data weights subset na action contr
  • ag-Grid React 在设置 gridApi 后忘记了它

    我已经修改了用按键选择使用 React 的示例 然而 一旦我按下箭头键 应用程序就会崩溃 代码如下 const gridApi setGridApi useState
  • 在 ggplot 中绘制置信区间

    我想使用 ggplot 绘制以下图 这是我的 df 结构的示例 有点 不按数据比例绘制 example df data frame mean c 0 3 0 8 0 4 0 65 0 28 0 91 0 35 0 61 0 32 0 94
  • 陷阱删除键

    我的问题相当简单 我需要将逻辑应用于 Excel 中的删除按钮 在我问的一个相关问题是清除数据透视表中的单元格的方法 现在意识到这可能不是正确的方法 这是我正在考虑的另一种选择 不幸的是 我承认我对 Visual Basic 的经验很少 而
  • 如何使用 html 类根据时间记录显示打开/关闭

    我正在尝试使用 Javascript 根据公司在该特定日期的时间显示 打开 或 关闭 我在 WordPress 上使用主题 Listify 客户可以在其中列出他们的业务 他们可以选择输入一周中每一天的工作时间 我希望能够使用存储在跨度内的数
  • 逆变解释

    首先 我在 SO 和博客上阅读了许多关于协变和逆变的解释 非常感谢埃里克 利珀特制作了如此精彩的系列协变和逆变 不过 我有一个更具体的问题 我正在努力解决这个问题 据我了解埃里克的解释协变和逆变都是描述变换的形容词 协变变换是保留类型顺序的
  • 没有列表的项目符号列表

    我有以下 html 代码 div class magicbullets Nice awesome cool div 我需要它表现得像 div class magicbullets ul li nice li li aweseome li l
  • SQLite 查询限制

    我正在构建一个小界面 我希望用户能够在其中写出他们的信息entiresql语句 然后查看返回的数据 但是 我不希望用户能够做任何有趣的事情 即delete from user table 实际上 我希望用户能够做的唯一一件事就是运行sele
  • 如何在不访问数据库的情况下创建带有延迟字段的 django 模型实例?

    假设我知道数据库中存在 django 模型的一行的一些字段 但没有将它们封装在模型实例中 有没有什么简单的方法可以让我将它们包装在模型实例中 而无需执行额外的数据库查询 并以填充了这些字段但所有其他字段都延迟的实例结束 所以说我有模型 fr
  • C# 代码不会启动程序。 Win32Exception 未处理

    我正在制作一个程序 当单击按钮时启动程序 它似乎适用于 Chrome 或 Word 等程序 但不适用于 fraps 等较小的程序 并给了我错误 System dll 中发生类型为 System ComponentModel Win32Exc
  • Big Endian 和 Little Endian 字节顺序的区别

    Big Endian 和 Little Endian 字节顺序有什么区别 这两个似乎都与 Unicode 和 UTF16 有关 我们到底在哪里使用它 Big Endian BE Little Endian LE 是组织多字节字的两种方法 例
  • 我应该如何在 C++ 中正确使用 FormatMessage()?

    Without MFC ATL 我该如何使用FormatMessage 获取错误文本HRESULT HRESULT hresult application CreateInstance Excel Application if FAILED