【发布时间】:2014-01-25 20:32:46
【问题描述】:
早在 1999 年就启动了一个需要两个进程之间进行通信的项目;一个是 VB6 应用程序,另一个是 Borland C++ 进程。 VB6 被设计为 COM ActiveX 服务器 EXE(进程外)应用程序,Borland C++ 应用程序将实例化 VB6 COM 服务器并访问 VB6 COM 服务器的方法和属性。在过去的 14 年中,这一直为我们提供了良好的服务,并且非常可靠;请注意,这两个进程都在同一台服务器上运行,但我们设计的进程只有在需要时才能在本地网络上的不同 Windows 系统上运行。
基本上,Borland C++ 应用程序可以从几个方法请求数据并获得响应,并且有一个由 VB6 COM 服务器触发的事件,它向 Borland C++ 进程发送 BSTR,它必须作为事件接收 - 这些每 100 毫秒发送一次,BSTR 大小在 250 到 2500 字节之间。
我需要开始考虑如何最好地用更新的 - 可能是 C# .NET 应用程序替换 VB6 ActiveX COM EXE 服务器。我与 Borland C++ 进程的开发人员有很好的接触和沟通,因此如果需要,也可以很容易地改变等式的一侧。
Borland C++ 开发人员使用的是相当旧的版本 - 我相信是 Borland 7?至少这比 VB6 更新很多,而且我不得不假设他至少在可预见的未来不会升级。
以下是当前的一些设计决策:我们不需要持久性或消息可靠性,如果消息丢失也没关系(他可以执行另一个请求或在从 COM 服务器向 Borland 触发事件的情况下)客户端 100 毫秒后的下一条消息就可以了)。两个进程都不能影响另一个进程——这就是我们选择 COM EXE 进程外服务器的原因。 Borland C++ 客户端不会考虑任何类型的进程内,甚至是 DLL 包装器。
这是我对未来的考虑:
使用 VS2012 C++ 的 ATL COM EXE 服务器,完全复制旧的 VB6 COM EXE 服务器;我真的希望摆脱 COM 的复杂性,转而使用一种新的、非常简单的处理通信的方法来处理通信。 (我不觉得这是在向前发展,而且维护、调试和添加新功能听起来也很糟糕?)如果我完全正确的话,Advantage Borland C++ 客户端不需要更改任何内容。
ZeroMQ 我已经编写了其他几个使用它的 C# 应用程序,我真的很喜欢它 - 但我不知道是否有适用于 Borland C++ 的 ZeroMQ 客户端(Borland C++ 开发人员可以只使用 C/C++ ZeroMQ 库吗? ?)
Redis - 我已经使用 Pub/Sub 编写了两个运行良好的 C# 应用程序,我真的很喜欢这个 - 有几个问题会出现适用于 Windows 7/8 的 Redis 的“生产”版本,我能找到吗Borland C++ 的 Redis 客户端,有吗?
? - 就上述选择或更好的选择寻求建议?
谢谢
对问题的主要编辑:如果您正在启动一个全新的 C# .net 应用程序和一个全新的 Borland C++ 应用程序,并且这两个应用程序需要在 Windows 7/8/9 上运行并且它们必须能够将数据发送到彼此 - 你会使用什么技术来处理通信?
谢谢 尼尔戴维斯
【问题讨论】:
标签: c# c++ com vb6 c++builder