如何在C#和Delphi应用程序之间通信?

| 我需要将我的应用程序(Delphi + MS SQL Server:从现在开始)与另一个应用程序(c#+ SQL Server:C从现在开始)进行接口。 C具有简约的Windows Forms用户界面,它的主要任务是连接到PDA发送和接收数据。 因此,他们的想法是删除C用户界面的UI,而只保留与DB和PDA通信所需的代码。 所以我需要C可以和D说话,反之亦然。 D到C:因此,在某些事件(例如TButton.OnPress)上,D会向C发送一些数据。因此,我需要调用C公开的方法。 C到D:D需要对C所执行的某些动作作出反应。因此C将调用D所公开的某些方法。即使在第一阶段,D只是“公开存储过程”。 我从来没有做过这样的事情。该怎么办? D当前是单个exe(win32)。 您建议使用哪种技术?     
已邀请:
如果要删除C中的用户界面,那么我建议将C包装在单个COM对象中,您可以从Delphi中透明地使用它。     
有很多选择。套接字可能是最可靠的,但是如果两个应用程序都在同一台计算机上运行,​​则可以使用窗口消息(
WndProc
和好友)或命名管道。     
我认为您可以使用套接字。您可以使用自己的协议,也可以使用Web服务,但是后者非常复杂。 Delphi具有WSDL导入程序,C ++具有gSOAP库。     
RemObjects SDK本身支持Delphi和.NET程序。它是较低层的附加层,但可能会使事情变得更容易。     
如果它们都使用相同的数据库,则可以将其用作它们之间的管道。 在一个应用程序中,写入特定表,而在另一个应用程序中,通过定期轮询该表来“监听”该表,删除已处理的任何“消息”。 这是一般的想法,它的好处是您可以立即使用它,而无需使用任何库。     
我在使用现有的Delphi应用程序与我的新.NET应用程序进行通信时,正在做类似的应用程序。我将应用程序包装到一个DLL中,并使用公开的函数从.NET进行调用,以及使用Callback proc将.NET与Delphi进行通信。     
作为一种选择,我可以提供我们的MsgConnect,它是一种轻量级的面向消息的中间件,可以轻松解决您的问题。 MsgConnect可用于Delphi和C#。上面提到的RemObjects SDK也是很棒的产品,尽管对于您的简单任务而言可能有点过大。     
您可以使用ZeroMQ。它是一个面向消息的免费堆栈。     
我的框架可以在Delphi和Visual Studio上运行,因此可以通过原始TCP套接字在Win32和.NET应用程序之间进行通信。     
您可以将C#代码转换为DLL(类库)。设置选项“使装配COM-可见”。创建新的证书(如果需要)并签名。 在Windows中注册您的C#DLL:\“ RegAsm -tlb -codebase YourLibrary.dll \”。 在Delphi中,导入您的库(在Component-> Import Component中,选择\“ Type library \”,然后选择您的库\“ Create Unit \”)。 在Delphi中,可以像使用COM对象(例如OLE Automation或ActiveX)一样使用C#库。 您可以创建用于Delphi和C#之间通信的接口。如果这样做,则可以轻松地在Delphi中的代码和C#中的代码之间实现双向通信。     

要回复问题请先登录注册