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

本文关键字:应用程序 消息 VB6 | 更新日期: 2023-09-27 18:00:51

Hi有一个VB6 Windows应用程序(旧.exe)和一个单独的C#Winforms应用程序(新.exe)。它们都在同一台Windows计算机上运行。

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

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

更新:

在这种情况下,我只谈论非常罕见的小消息——例如,使用"Invoice 67"之类的小消息更改您正在查看的选项卡

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

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

前面的两个答案都没有考虑到这可能是一个多租户环境,甚至是跨域的事实。当你进入分布式系统时,你应该考虑消息传递,而不是进程间通信,随着时间的推移,这将限制可扩展性。

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

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

MSMQ是特定于域的,由Azure覆盖全球。

同意Clay的意见。

然而,我会在黑暗中试探一下,选择最明显的答案:

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

这里有一个关于使用命名管道主题的链接。。。但它太旧了,没有像应该的那样使用WCF。。。但要点是一样的:http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp使用WCF更新的版本:http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

以下是Windows的IPC替代品的大致完整列表。

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

它们中的大多数也可以从VB6和C#中使用。

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

在.NET中,你可以使用大量的类来实现这一目的(在System.NET中,从低级到高级有很多东西)。在VB6中,你也可以使用IDE附带的Winsock控件。我使用Dart-Winsock控件(成本$$),只是因为它更灵活。

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

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

为传入和传出消息创建一个专用文件夹(一个应用程序传入文件夹将是另一个传出文件夹)

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

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

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

这个问题的终极答案

虚拟零调制解调器:http://en.wikipedia.org/wiki/Null_modem#Virtual_null_modem

来自维基百科:

虚拟零调制解调器是连接两个的通信方法直接使用虚拟串行端口。与null不同调制解调器电缆,虚拟零调制解调器是模拟中的硬件零调制解调器计算机硬件的所有功能空调制解调器在虚拟中可用空调制解调器。有一些优点:

更高的串行数据传输速度(受计算机性能限制仅)。可以通过网络或互联网进行虚拟连接,减少电缆长度限制。虚拟连接的数量不受限制。不需要串行电缆。计算机的物理串行端口保持空闲。

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

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

该解决方案的亮点是:不需要电缆!!!

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