Easy IPC на Windows Mobile?

В проекте 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 и, возможно, на других платформах?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
3 078
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы рассмотрели практически все доступные базы; 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. Он медленный, неуклюжий и очень подвержен ошибкам.

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

Спасибо, прочитав еще немного, я думаю, мне просто нужно будет использовать локальный сокет (надеюсь, это должно работать на всех мобильных платформах)

Steven 15.10.2008 12:51

Будет ли фиксация методов очереди сообщений лучше всего для .Net CF? Мы как раз подумывали о том, чтобы провести тупую старую таблицу Sql с библиотеками Sqlite.

RoboJ1M 07.10.2013 18:46

для двухточечных очередей да, P / Invoke - единственный вариант. Здесь они уже готовы: msdn.microsoft.com/en-us/library/aa446556.aspx

ctacke 07.10.2013 20:54

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

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

Другие вопросы по теме