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