IBM MQSeries ActiveX写消息错误

时间:2011-05-11 13:17:12

标签: vb6 activex ibm-mq

我有一个带有MQSeries Automation Classes for ActiveX的VB6应用程序。问题是当我在队列中写入消息时。我使用这段代码:

这是我打开连接和相对队列的方式:

Set MQSess = New MQSession
//Access Queue
Set QMgr = MQSess.AccessQueueManager(QueueManagerName)

Dim Queue As MQQueue
Dim msg As MQMessage
Dim pmo As MQPutMessageOptions

Dim ArrCar() As Byte

Set pmo = New MQPutMessageOptions

Set Queue = QMgr.AccessQueue(QueueName, OpenOption , RemoteQueueManagerName)
//OpenOption is a integer with value of 16 (MQOO_OUTPUT) 

strMsgAppo = Translate("*MESSAGE_TO_INSERT*", ASCII_To_EBCDIC_Table())

ReDim ArrCar(Len(strMsgAppo) - 1)
For lngI = 1 To Len(strMsgAppo)
    ArrCar(lngI - 1) = Asc(Mid(strMsgAppo, lngI, 1))
Next lngI

Call msg.Write(ArrCar) //Write the ByteArray

Call Queue.Put(msg, pmo)

ASCII_To_EBCDIC_Table是用于更改编码的函数。

我从MQ获得的错误是:

MQAX200.MQMessage :: Write CompletionCode = 2,ReasonCode = 2043,ReasonName = MQRC_OBJECT_TYPE_ERROR


是否有人使用此activex并可以帮助我如何在队列中写入消息?

2 个答案:

答案 0 :(得分:2)

在提供的代码片段中,我没有看到与QMgr建立连接的位置以及队列打开的位置。必须先完成这两个步骤,然后才能将消息放入队列。

PUTOPEN的“消息选项”字段中存在无效选项时,会出现2043原因代码。在这种情况下,问题可能在PUT上,也可能在隐式OPEN上,具体取决于代码中未提供的内容以及是否包含OPEN

我的建议是参考安装中提供的.Net示例,并在这些示例与您的应用程序之间进行协调。样本驻留在C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet\samples的默认V7安装中。

答案 1 :(得分:1)

失败在你的msg.Write上,你可能应该在将.CharacterSet属性设置为37(EBCDIC)之后使用.WrirteString方法。

您的Translate()函数的hackish方法可能有效,但只有在分配给Byte数组时才有效。当你有东西时,你可能会在数据转换回Unicode时看到加扰。或者,如果Translate()确实返回一个Byte数组,那么你会在Unicode字符串中弄乱8位数据(这可能很好,但不能使用这个MQ库)。

你可能只是扔掉Translate()和你的桌子。

此API的IBM手册名为“Using the Component Object Model Interfac e”。看看吧!