我有一个VB6应用程序,其中包含用于ActiveX的MQSeries自动化类。问题是,当我在写消息时,在队列中。我使用以下代码:
我是这样打开连接和相关队列的:
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 = 2,ReasonCode = 2043,ReasonName = MQRC_OBJECT_TYPE_ERROR
是否有人使用此activex并能帮助我如何在队列中写入消息?
发布于 2011-05-11 14:46:28
故障发生在您的msg.Write上,在将.CharacterSet属性设置为37 (EBCDIC)之后,您可能应该使用.WrirteString方法。
翻译()函数的hackish方法可能会工作,但只有当分配给Byte数组时才能工作。当数据被转换回Unicode时,您可能会看到一些乱码。或者,如果转换()确实返回了Byte数组,那么Unicode字符串中的8位数据就会变得一团糟(这个字符串可以很好,但是这个MQ库不行)。
你也许可以把翻译()和你的桌子扔掉。
关于这个API的IBM手册称为“使用组件对象模型Interface”。看看这个!
发布于 2011-05-11 14:16:05
在提供的代码片段中,我看不到连接到QMgr的位置,也不知道队列是在哪里打开的。在将消息放入队列之前,必须完成这两个步骤。
当PUT或OPEN的Message字段中存在无效选项时,就会出现2043年原因代码。在这种情况下,问题可能出现在PUT上,也可能是隐式OPEN上,这取决于代码中没有提供什么以及它是否包含OPEN。
我的建议是参考安装中提供的.Net示例,并在这些示例和应用程序之间进行协调。示例位于C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet\samples中默认的V7安装中。
https://stackoverflow.com/questions/5964897
复制相似问题