Delphi 如何向服务发送消息?

Delphi 如何向服务发送消息?,delphi,Delphi,我们正在尝试开发一个向服务发送消息的应用程序,但我们只有在两个应用程序之间发送消息。我们正在开发Delphi7,WindowsXP 我们需要服务将消息发送回应用程序,这取决于应用程序发送给服务的操作的结果 嗯,有些人说不可能从应用程序向服务发送消息。所以,我们决定提供两个服务,现在我们必须从一个服务向另一个服务发送消息。现在,重点是:如何将消息从一个服务发送到另一个服务?您不能向服务发送窗口消息。首先,服务没有自己的UI,更不用说windows了。第二,即使您将自己的隐藏窗口添加到服务中(实际上

我们正在尝试开发一个向服务发送消息的应用程序,但我们只有在两个应用程序之间发送消息。我们正在开发Delphi7,WindowsXP

我们需要服务将消息发送回应用程序,这取决于应用程序发送给服务的操作的结果


嗯,有些人说不可能从应用程序向服务发送消息。所以,我们决定提供两个服务,现在我们必须从一个服务向另一个服务发送消息。现在,重点是:如何将消息从一个服务发送到另一个服务?

您不能向服务发送窗口消息。首先,服务没有自己的UI,更不用说windows了。第二,即使您将自己的隐藏窗口添加到服务中(实际上,基于Delphi的服务具有隐藏的TApplication窗口),窗口消息也不允许越过会话边界(服务在单独的会话中运行,而不是在用户模式应用程序中运行)


有许多IPC(进程间通信)机制与服务一起工作——命名管道、邮件槽、TCP/IP和UDP套接字,仅举几例。您将不得不使用其中一个管道。

我建议使用命名管道。SO上的某人已经提供了一个(本网站上也有其他示例)

我使用Indy TCP服务器提供服务,然后我可以从同一台机器或其他机器进行通信。这是一个简单的补充。我来回发送一条记录,记录的开头告诉服务器消息的类型和缓冲区包含的内容,反之亦然


理查德

对不起,这是假的。您可以向服务发送窗口消息。只需在服务创建时设置适当的参数。然后创建自己的消息处理程序。在本地,带有WM_COPYDATA的GDI消息比任何其他IPC机制都要快(至少在消息大小为KB的情况下)。要将消息发送回应用程序,只需使用PostMessage或SendMessage调用客户端HWND实例(已随第一条消息一起发送)。请参阅和TSQLRestClientURIMessage+TSQLRestServer。ExportServerMessage@A.Bouchez:您具体指的是什么创建参数<代码>服务交互过程?从Vista开始,不再支持该标志。窗口消息不能跨越会话边界(在任何版本的Windows中)。服务与外部应用交换窗口消息的唯一方式是该应用与服务在同一会话中运行。在XP和更早版本中,服务不会与大多数登录用户在同一会话中运行,在Vista和更高版本中也不会与任何用户在同一会话中运行。