Параметры взаимодействия служб Windows

#c #windows #winapi #rpc

#c #Windows #winapi #rpc

Вопрос:

Я разрабатываю службу, которая будет работать как система и будет обрабатывать длительные задачи в фоновом режиме. Теперь мне нужно отобразить некоторую обратную связь для пользователя в виде значка tasktray, и я также хотел бы иметь возможность приостанавливать / возобновлять задачи с помощью значка tasktray, поэтому мое требование — отправить сообщение в любом направлении и получить в ответ блок данных произвольной длины. Один запрос / ответ был бы хорош, но он должен работать в обоих направлениях.

Это использование C (не MFC) в Windows.

Я рассмотрел MIDL / RPC, поскольку использовал его в прошлом, но сначала мне нужно определить жесткую спецификацию интерфейса, и я не могу возвращать данные произвольной длины (насколько мне известно).

Есть ли какие-либо предложения по библиотеке, которую я мог бы использовать для этого?

Спасибо, J

Комментарии:

1. Обычно вы открываете канал и обмениваетесь данными через него.

Ответ №1:

COM — лучшее решение для RPC в Windows. Он очень мощный и простой в написании. Необработанный 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. */
  

Ответ №2:

Вы можете использовать любое из следующих:

  • TCP/IP
  • UDP
  • Канал
  • разделяемая память (т.е. файл с отображением в память)

РЕДАКТИРОВАТЬ — согласно комментарию:

Некоторые решения на основе общей памяти, включая исходный код:

Комментарии:

1. Спасибо за ответ, но я в идеале ищу библиотеку, которая может справиться со сложностями, а не создавать свои собственные.