Windows服务通信的选项

时间:2011-10-10 11:15:40

标签: c++ windows winapi rpc

我正在开发一个将作为系统运行的服务,并将在后台处理长时间运行的任务。我现在需要以tasktray图标的形式向用户显示一些反馈,我还希望能够从任务栏图标暂停/恢复任务,所以我的要求是向任一方向发送消息并接收任意长度数据阻止响应。单个请求/响应可以正常,但它需要在两个方向上工作。

这是在Windows中使用C ++(非MFC)。

我已经看过MIDL / RPC,因为我过去曾经使用它,但我需要首先定义一个严格的接口规范,并且不能返回任意长度的数据(据我所知)。

对于我可以使用的库,是否有任何建议?

谢谢, Ĵ

2 个答案:

答案 0 :(得分:2)

COM是Windows中RPC的最佳解决方案。它非常强大且易于编写。原始的MS-RPC也很好。两者都可以返回任意长度数据,请参阅size_is MIDL属性:

HRESULT Proc7(
     [out] long  * pSize,
     [out, size_is( , *pSize)] my_type ** ppMyType); /* Specifies a pointer 
                                              to a sized pointer, 
                                              which points to a block 
                                              of my_types, whose size is
                                              unknown when the stub 
                                              calls the server. */

答案 1 :(得分:1)

您可以使用以下任何一项:

  • TCP / IP
  • UDP
  • 共享内存(即内存映射文件)

编辑 - 根据评论:

一些基于共享内存的解决方案,包括源代码: