如何从VB6应用程序向我的C#应用​​程序发送消息

时间:2011-06-29 05:59:49

标签: c# .net windows vb6 communication

您有一个VB6 Windows应用程序(old.exe)和一个单独的C#Winforms应用程序(new.exe)。它们都运行在同一台Windows机器上。

我可以访问VB6和C#源代码,但应用程序需要保持独立。

如果两者都在运行并且彼此了解(进程ID),那么将消息从一个窗口发送到另一个窗口的最佳方式是什么?

更新

在这种情况下,我只谈论非常罕见的小消息 - 例如使用“发票67”

等小消息更改您正在查看的标签

双向消息传递会很棒,但VB6到.Net是最重要的。

6 个答案:

答案 0 :(得分:2)

同意Clay的评论。

但是,我会在黑暗中捅一下,然后选择最明显的答案:

.NET(w / WCF)支持IPC和命名管道,用于本地进程内通信。

这是使用命名管道的主题的链接...但它超级旧,并且不像它应该使用WCF ......但重点是:http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp使用WCF的更新版本:{ {3}}

答案 1 :(得分:2)

这是一个或多或少完整的Windows IPC替代品列表。

http://msdn.microsoft.com/en-us/library/aa365574%28v=vs.85%29.aspx

其中大多数也可以从VB6和C#中使用。

答案 2 :(得分:2)

这两个先前的答案都没有考虑到这可能是一个多帐篷环境甚至跨越你的领域。当您进入分布式系统时,您需要考虑消息传递而不是进程间通信,这会随着时间的推移限制可伸缩性。

对于内部部署解决方案,考虑MSMQ,那里有大量文档,证明了这种消息传递基础架构的简单性。

对于更广泛的场景,您应该考虑Windows Azure存储队列,您可以获得几乎相同的可用性,但具有更广泛的可访问性和改进的管理工具。

MSMQ是特定于域的,Azure遍布全球。

答案 3 :(得分:1)

我为此目的使用的解决方案是在进程之间进行TCP通信。它允许双向通信。作为奖励,如果您将其中一个应用程序移动到另一个框中,您的应用程序将继续运行,只需进行很少的更改。

在.NET中,您可以使用大量的类来实现此目的(在System.Net中从低级别到高级别的大量内容)。在VB6中,您可以使用IDE附带的Winsock控件。我使用Dart Winsock控件(成本$$$),因为它更加灵活。

我设置了两个应用程序来发送/接收具有已知模式的XML片段。通常有一个属性告诉另一个应用程序接收的消息类型以及有效负载。

答案 4 :(得分:0)

基本解决方案(基于提供的信息):

为传入和传出邮件创建专用文件夹(一个应用程序传入文件夹将是其他传出文件夹)

将消息(或数据)写入text / xml或其他格式到输出文件夹(添加Source字段,以便应用程序知道它的来源)

根据日期阅读消息,并导入消息/数据

这允许与任何应用程序集成。

答案 5 :(得分:-1)

对此问题的最终答案

VIRTUAL NULL调制解调器: http://en.wikipedia.org/wiki/Null_modem#Virtual_null_modem

来自维基百科:

  

虚拟零调制解调器是一个   通信方法连接两个   计算机应用程序直接使用   虚拟串口。不像null   调制解调器电缆,虚拟零调制解调器是一个   模拟a的软件解决方案   内部的硬件零调制解调器   电脑。硬件的所有功能   null调制解调器在虚拟中可用   null调制解调器。有一些   优点:

     

串行数据的传输速度更高(受计算机性能的限制)   只要)。可以通过网络或Internet进行虚拟连接,减少电缆   长度限制。   可以使用无限数量的虚拟连接。   无需串行电缆。   计算机的物理串口仍然是免费的。

     

例如,DOSBox允许更旧   DOS游戏使用虚拟空调制解调器。

     

另一个常见的例子包括   unix伪终端(pty)   提供一个标准的tty接口   用户应用程序,包括虚拟   串行控制。两个这样的ptys可能   很容易被一个人联系在一起   应用程序以形成虚拟null   调制解调器通信路径。

这个解决方案的亮点是:它需要没有电缆 !!!

*注;这是一种幽默的尝试。如果它不好笑,请原谅我。