【问题标题】:How to translate integer error-codes into human-readable strings?如何将整数错误代码转换为人类可读的字符串?
【发布时间】:2020-11-18 00:34:43
【问题描述】:

IBM 竭尽全力记录不同 MQ 相关函数的可能错误代码,但我找不到将整数代码转换为人类可读字符串的现有库函数。

类似于 libc 的 strerror(3) 或 OpenSSL 的 ERR_error_string(3)...

我想,程序员和操作员应该有一本方便的(如果是折耳的)参考书......

或者该功能是否存在——只是不容易找到?

【问题讨论】:

  • 您可以使用std::mapstd::unordered_map 轻松创建自己的函数。
  • 如果ibm-mq是开源的,你可以在它的源代码中找到它,甚至可以生成(例如用GNU gawk)这样一个简单函数的C++代码。如果ibm-mq 是用Java 编码的,您可能可以使用Java 类反射来生成这样的代码
  • @BasileStarynkevitch - IBM MQ 不是开源的,所以你不会找到它的源代码,但标头是可用的,还有一个将数字转换为常量字符串名称的函数。
  • 如果 C++ 标头可用,您可能可以查看它们的内部。征求您的律师的许可。
  • 头文件应该被程序员使用,我认为你不需要律师来使用提供的头文件:-)

标签: c++ ibm-mq


【解决方案1】:

您可以转换数字,例如2035,使用在头文件cmqstrc.h 中提供的MQRC_STR 函数转换为诸如“MQRC_NOT_AUTHORIZED”之类的字符串。

如果您想要的不仅仅是常量的字符串表示,您可以考虑调用随 IBM MQ 的分布式平台版本一起提供的 mqrc 可执行文件,并抓取输出。在我看来,常量的字符串版本对大多数人来说已经足够了。

#include <cmqc.h>                   /* Include for MQI Constants */
#include <cmqstrc.h>                /* Convert MQRC into string  */

:

MQCONN(QMName,
       &hConn,
       &CompCode,
       &Reason);
if (Reason)
{
  printf("MQCONN to QMgr %.48s failed with reason %d (%s)\n",
         QMName, Reason, MQRC_STR(Reason));
  :
}

【讨论】:

  • 我在 SDK 版本 7.5.0 中没有 cmqstrc.h -- 标头是后来添加到套件中的吗?搜索函数名称的所有其他标头也不会产生任何结果:(
  • cmqstrc.h 在 MQ V8 或更高版本中。您可以从更高版本中获取并使用它。它只有带有 switch/case 语句的每个 MQ 字段类型的子例程。一次性输出 switch/case 很好,但是如果你在做一些非常重复的事情,那么你应该编写自己的二进制搜索算法。
  • 我发布了一个blog item,它提供了一个头文件,其中包含用于查找 MQ 完成和原因代码的代码。
  • 正如@Roger 回答的那样,您可以毫无问题地使用更高版本的标头。我还建议安装一个更新版本的 MQ,因为 V7.5 已经停止服务一段时间了。
  • @MikhailT。对我来说,当新客户试用产品时,我总是说“如果您认为产品‘x’缺少功能,请告诉我’。如果我不得不猜测,我认为至少 60% 的功能在我们的产品来自最终用户的要求。故事的寓意是软件公司不是读心者。因此,问问你是否想要一些东西。
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2018-12-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多