首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VB6中通过MSMQ在C#中提取属性包或复杂对象

如何在VB6中通过MSMQ在C#中提取属性包或复杂对象
EN

Stack Overflow用户
提问于 2014-06-25 08:43:58
回答 2查看 784关注 0票数 0

我是VB6的新手,也是MSMQ的新手。我在网上读了很多教程,但似乎没有办法解决我的问题。

我设法从C#发送到C#或VB6发送到VB6,但没有从VB6发送到C#,反之亦然。所以我想知道这是一种方式,还是没有办法进行这种交流。

例如:我想将这个发送到MSMQ

代码语言:javascript
运行
复制
Dim PropBag As PropertyBag
 Set PropBag = New PropertyBag
 PropBag.WriteProperty "Customer", "Bob"
 PropBag.WriteProperty "Product", "MoeHairSuit"
 PropBag.WriteProperty "Quantity", 4

在C#中获取详细信息,在给定的编码中有“无效字符。第1行,位置1”。使用XmlMessageFormatter时出错

代码语言:javascript
运行
复制
Message mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
result = mes.Body.ToString();

我也试着从溪流中读出来,但它在我的字符串中出现了一个奇怪的符号。下面是代码,这是输出“늓\0\0\b\b휖ꭑ(늓)”

代码语言:javascript
运行
复制
Message mes;
mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.BodyStream.Position = 0;
byte[] b = new byte[mes.BodyStream.Length];
mes.BodyStream.Read(b, 0, (int)mes.BodyStream.Length);
UnicodeEncoding uniCoder = new UnicodeEncoding();
result = uniCoder.GetString(b);

我得到这个异常“不能反序列化作为参数传递的消息。无法识别序列化格式。”使用ActiveXMessageFormatter时,如下所示

代码语言:javascript
运行
复制
mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.Formatter = new ActiveXMessageFormatter();
result = mes.Body.ToString();

你们知道怎么做吗?高级致谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-26 14:30:35

我以前处理过这种类型的问题,而我找到的最好的解决方案实际上是将对象序列化成XML --之后,您使用哪种语言/平台对语言进行编码/解码并不重要,因为您总是有选择的文本格式。在二进制格式中,直接格式化程序并不一定在平台上以相同的方式工作(VB6/C#)。

参考资料:http://www.codeproject.com/Articles/33296/Serialization-and-De-serialization

换句话说,您需要在两个平台上都有一个标准序列化程序,而不是试图序列化属性包本身。

票数 1
EN

Stack Overflow用户

发布于 2014-06-25 12:19:16

VB6属性包以二进制格式存储数据。然后尝试以文本格式读取数据。这就是整个问题所在。无法识别的字符--是PropertyBag.Try中数据的类型和大小,以便在两边以二进制形式进行数据交换。

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

https://stackoverflow.com/questions/24404013

复制
相关文章

相似问题

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