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