早在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的复杂性,而转向一种新的,非常简单的过程来处理通信。 (我不认为这正在向前发展,听起来在维护,调试和添加新功能上也很麻烦?)如果我完全正确,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上运行,并且它们必须能够相互发送数据-您将使用什么技术来进行通讯过程?
谢谢
尼尔·戴维斯(Neal Davis)
最佳答案
C#几乎可以像VB6一样出色地隐藏COM的复杂性。因此,在C#中实现相同的COM接口应该在更少的时间内获得#1的优势。