首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IBM MQSeries ActiveX写入消息错误

IBM MQSeries ActiveX写入消息错误
EN

Stack Overflow用户
提问于 2011-05-11 13:17:11
回答 2查看 829关注 0票数 3

我有一个VB6应用程序,其中包含用于ActiveX的MQSeries自动化类。问题是,当我在写消息时,在队列中。我使用以下代码:

我是这样打开连接和相关队列的:

代码语言:javascript
复制
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并能帮助我如何在队列中写入消息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-11 14:46:28

故障发生在您的msg.Write上,在将.CharacterSet属性设置为37 (EBCDIC)之后,您可能应该使用.WrirteString方法。

翻译()函数的hackish方法可能会工作,但只有当分配给Byte数组时才能工作。当数据被转换回Unicode时,您可能会看到一些乱码。或者,如果转换()确实返回了Byte数组,那么Unicode字符串中的8位数据就会变得一团糟(这个字符串可以很好,但是这个MQ库不行)。

你也许可以把翻译()和你的桌子扔掉。

关于这个API的IBM手册称为“使用组件对象模型Interface”。看看这个!

票数 1
EN

Stack Overflow用户

发布于 2011-05-11 14:16:05

在提供的代码片段中,我看不到连接到QMgr的位置,也不知道队列是在哪里打开的。在将消息放入队列之前,必须完成这两个步骤。

PUTOPEN的Message字段中存在无效选项时,就会出现2043年原因代码。在这种情况下,问题可能出现在PUT上,也可能是隐式OPEN上,这取决于代码中没有提供什么以及它是否包含OPEN

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5964897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档