C++ 如何将整数错误代码转换为人类可读的字符串?

C++ 如何将整数错误代码转换为人类可读的字符串?,c++,ibm-mq,C++,Ibm Mq,IBM对不同MQ相关函数的可能错误代码进行了大量的文档记录,但我找不到现有的库函数来将整数代码转换为人类可读的字符串 类似于libc的strerror(3)或OpenSSL的error\u error\u string(3) 我想,程序员和操作员都应该有一本方便的(如果有狗耳朵的话)参考书 或者该函数是否存在?只是不容易找到?您可以使用头文件cmqstrc.h中提供的MQRC\u STR函数将数字(例如2035)转换为字符串,例如“MQRC\u not\u AUTHORIZED” 如果您想要的不

IBM对不同MQ相关函数的可能错误代码进行了大量的文档记录,但我找不到现有的库函数来将整数代码转换为人类可读的字符串

类似于libc的
strerror(3)
或OpenSSL的
error\u error\u string(3)

我想,程序员和操作员都应该有一本方便的(如果有狗耳朵的话)参考书


或者该函数是否存在?只是不容易找到?

您可以使用头文件
cmqstrc.h
中提供的
MQRC\u STR
函数将数字(例如2035)转换为字符串,例如“MQRC\u not\u 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));
  :
}
#include/*include用于MQI常量*/
#include/*将MQRC转换为字符串*/
:
MQCONN(QMName,
&hConn,
&CompCode,
&原因);
如果(原因)
{
printf(“MQCONN到QMgr%.48s失败,原因是%d(%s)\n”,
QMName,Reason,MQRC_STR(Reason));
:
}

<代码> >您可以轻松地创建自己的函数,使用<代码> STD::MAP<代码> >代码> STD::无序代码映射> <代码>,如果您可以在源代码中找到它,甚至可以生成(例如)C++这样简单函数的代码。如果
IBMMQ
是用Java编码的,您可能会使用Java类反射来生成这样的code@BasileStarynkevitchIBM MQ不是开源,所以你不会找到它的源代码,但是头文件是可用的,所以函数是把数字转换成常数字符串名称的。C++的头是可用的,你可能被允许看里面。请咨询您的律师以获得许可。这些头文件预计将由程序员使用,我认为您不需要律师来使用提供的头文件:-)我在SDK 7.5.0版中没有
cmqstrc.h
-头文件是后来添加到工具包中的吗?对函数名的所有其他头进行灰显也不会产生任何结果:(
cmqstrc.h
在MQ V8或更高版本中。您可以从更高版本中获取并使用它。它只是为每个MQ字段类型提供了带有switch/case语句的子例程。对于一次性输出switch/case是可以的,但是如果您正在做一些极其重复的事情,那么您应该编写自己的二进制搜索算法。我发布了一个des一个头文件,其中包含用于查找MQ完成代码和原因代码的代码。正如@Roger所回答的,您可以使用更高版本的头文件,而不会出现任何问题。我还建议您安装一个稍新版本的MQ,因为V7.5已经停止使用一段时间了。@MikhailT。对于我来说,当新客户正在试用某个产品时,我会ays说:“如果你认为产品‘x’缺少一个功能,请让我知道。如果我不得不猜测,我认为我们产品中至少60%的功能来自最终用户的请求。这个故事的寓意是软件公司不是读心术的人。因此,问问你是否需要一些东西。