Простой IPC на Windows Mobile? - PullRequest
       43

Простой IPC на Windows Mobile?

5 голосов
/ 14 октября 2008

В проекте C ++ (т.е. нет .NET) в Windows Mobile я ищу способ легко обмениваться данными между двумя независимо работающими приложениями. Приложение A будет запускать службу, в то время как приложение B предоставит пользователю некоторую функциональность, для которой B должен вызывать некоторые функции A. Я бы не стал реализовывать что-либо в COM.

На самом деле, я бы предпочел не выполнять какой-либо сериализации или подобное (т.е. это исключило бы использование сокетов / каналов / файлов), а скорее, чтобы B передавал все параметры и указатели на A, как если бы A был частью of B. Кроме того, приложения C, D и E должны иметь возможность делать то же самое только с одним запущенным экземпляром A.

Я должен добавить, что иногда B должен возвращать массив (или std :: vector или std :: map) в A, размер которого ранее не был известен.

Возможно ли это на Windows Mobile и, возможно, на других платформах?

Ответы [ 5 ]

14 голосов
/ 14 октября 2008

Вы не можете просто обмениваться данными между процессами. Я не рекомендую COM. Трубы не существуют в Windows CE. Ваш лучший маршрут - это либо файл сопоставления памяти (как на рабочем столе), либо очередь сообщений точка-точка (ничего похожего на рабочий стол). Что лучше, зависит от вашего сценария использования.

Не не попробуйте использовать межпроцессную память с VirtualAlloc, как это было предложено, поскольку это небезопасный хакер, небезопасный и не поддерживается в CE 6.0 или более поздней версии, так что в итоге вы выйдете из-под WinMo 7 и более поздних версий.

Я не рекомендую использовать сообщения Windows и WM_COPYDATA. Это медленно, грязно и очень склонно к ошибкам.

Люди, пожалуйста, не просто отвечайте на вопросы, когда вы не использовали платформу просто для того, чтобы попытаться заработать очки репутации. Если вы не знаете платформу, позвольте кому-то другому помочь парню вместо того, чтобы отправлять его в погоню за диким гусем.

0 голосов
/ 18 декабря 2008

Вот хороший источник для начала - http://msdn.microsoft.com/en-us/library/aa446520.aspx Вы сами решаете, какой вариант лучше всего подходит для ваших нужд.

0 голосов
/ 10 ноября 2008

Поскольку для связи со службой (A) требуется только приложение (B), почему бы вам просто не использовать CreateFile и DeviceIoControl с определенным набором IOCTL?

0 голосов
/ 14 октября 2008

В Windows Mobile мне кажется, что все процессы отображаются в одном и том же адресном пространстве. Итак, создайте окна сообщений в обоих процессах с известными именами или именами классов и используйте FindWindow в каждом процессе, чтобы найти другой.

Затем SendMessage с идентификатором сообщения, определенным WM_APP, и указателем на данные для передачи в wParam или lParam.

Если я ошибаюсь и Mobile распределяет память процесса, то просто используйте WM_COPYDATA, который - на рабочем столе использует отображение памяти и, следовательно, очень быстро - для отправки данных между приложениями.

0 голосов
/ 14 октября 2008

Вы охватили почти все доступные базы; COM, каналы, сокеты, отображенные в память файлы. Все процессы в Windows имеют совершенно разные области памяти, поэтому вы не можете ничего использовать, не используя один из этих механизмов IPC.

...