【问题标题】:Windows ErrorMessage returning the code and not the messageWindows ErrorMessage 返回代码而不是消息
【发布时间】:2013-10-31 01:06:00
【问题描述】:

我有一些代码调用 _com_object 的 ErroerMessage() 函数以在 try, catch 中返回错误代码。

catch(const _com_error& error)
{
   myError = _T("Failed, Reason:")+error.ErrorMessage();
}

我没有得到实际的 windows 字符串来解释错误,而是返回了错误代码。在这种情况下 0xC00E001E

我已包含 mqoa.dll 以允许访问 MSMQ 的 windows dll

我使用断点单步执行,发现返回的wCode始终为0。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • myError的类型是什么?看起来您正在添加两个指针而不是连接字符串。
  • CString& csError 是 myError ,我收到错误消息说 Failed Reason: 0xC00E001E 和错误代码,但我认为获取代码的定义可能有问题

标签: c++ com msmq


【解决方案1】:

_T("Failed, Reason:") 是一个指向TCHAR 的常量指针。 ErrorMessage() 还返回一个指向 TCHAR 的 const 指针。 + 运算符最终执行指针运算而不是连接字符串。

如果myErrorCString,则可以使用其+= 运算符:

myError = _T("Failed, Reason: ");
myError += error.ErrorMessage();

或者它的Format()方法:

myError.Format(_T("Failed, Reason: %s"), error.ErrorMessage());

【讨论】:

  • 尝试使用这两种方法,我一直遇到同样的问题,我得到错误代码但没有字符串版本。失败,原因:0xC00E001E是输出
  • @user,可能FormatMessage() 不知道如何格式化 MSMQ 错误。它在标准 COM 错误(例如E_FAIL)下是否按预期工作?
  • 在这种情况下,您可能无能为力。如果FormatMessage() 不知道MSMQ 错误代码,则无法使用ErrorMessage()。您可能想自己实现一个消息表,here 是所有 MSMQ 错误代码及其描述的列表。
  • 我最初认为这可能是问题所在,并考虑将其作为一种解决方法,并将其保存为最后一种情况,因为需要实施大量代码。为这种方式的帮助和病痛欢呼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多