В проекте C++ (т.е. без .NET) в Windows Mobile я ищу способ легко взаимодействовать между двумя независимо запущенными приложениями. Приложение A будет запускать службу, тогда как приложение B предоставит пользователю некоторые функции, для которых B должен вызывать некоторые функции A. Я бы предпочел не реализовывать что-либо в COM.
Фактически, я бы предпочел не делать какой-либо сериализации или подобного (т.е. это исключало бы использование сокетов / каналов / файлов), а лучше, чтобы B передавал все параметры и указатели на A, точно так же, как если бы A был частью B. Кроме того, приложения C, D и E должны иметь возможность делать то же самое только с одним запущенным экземпляром A.
Я должен добавить, что B иногда должен возвращать массив (или std :: vector или std :: map) в A, размер которого ранее не был известен.
Возможно ли это на Windows Mobile и, возможно, на других платформах?





Вы рассмотрели практически все доступные базы; COM, каналы, сокеты, файлы с отображением памяти. Все процессы в Windows имеют полностью отдельные области памяти, поэтому вы не можете поделиться чем-либо без использования одного из этих механизмов IPC.
В Windows Mobile я, кажется, помню, что все процессы отображаются в одном адресном пространстве. Итак, создайте окна сообщений в обоих процессах с известными именами и / или именами классов и используйте FindWindow в каждом процессе для поиска другого.
Затем SendMessage с идентификатором сообщения, определенным WM_APP, и указателем на данные для передачи в wParam или lParam.
Если я ошибаюсь, и Mobile действительно разделяет память процесса, просто используйте WM_COPYDATA, который - на рабочем столе использует отображение памяти и поэтому работает очень быстро - для отправки данных между приложениями.
Вы не можете просто обмениваться данными между процессами. Я не рекомендую COM. В Windows CE нет каналов. Ваш лучший маршрут - это либо файл с отображением памяти (как на рабочем столе), либо точка-точка очереди сообщений (не как на рабочем столе). Что лучше, зависит от вашего сценария использования.
нет пытается использовать межпроцессную память с VirtualAlloc, как предлагается, поскольку это небезопасный взлом небезопасен и не поддерживается в CE 6.0 или более поздних версиях, поэтому в конечном итоге вы сломаетесь в WinMo 7 и более поздних версиях.
Я не рекомендую использовать сообщения Windows и WM_COPYDATA. Он медленный, неуклюжий и очень подвержен ошибкам.
Люди, пожалуйста, не отвечайте на вопросы, когда вы не использовали платформу, только для того, чтобы попытаться заработать очки репутации. Если вы не знаете платформу, позвольте кому-нибудь другому помочь парню, вместо того, чтобы отправлять его в погоню за дикими гусями.
Будет ли фиксация методов очереди сообщений лучше всего для .Net CF? Мы как раз подумывали о том, чтобы провести тупую старую таблицу Sql с библиотеками Sqlite.
для двухточечных очередей да, P / Invoke - единственный вариант. Здесь они уже готовы: msdn.microsoft.com/en-us/library/aa446556.aspx
Поскольку вам нужно только приложение (B) для связи со службой (A), почему бы вам просто не использовать CreateFile и DeviceIoControl с определенным набором IOCTL?
Вот хороший источник для начала - http://msdn.microsoft.com/en-us/library/aa446520.aspx Вы сами решаете, какой вариант лучше всего подходит для ваших нужд.
Спасибо, прочитав еще немного, я думаю, мне просто нужно будет использовать локальный сокет (надеюсь, это должно работать на всех мобильных платформах)