Question

Dans un projet C ++ (c'est-à-dire sans .NET) sous Windows Mobile, je recherche un moyen de communiquer facilement entre deux applications exécutées indépendamment. L'application A exécuterait un service, alors que l'application B fournirait à l'utilisateur certaines fonctionnalités - pour lesquelles B doit appeler certaines fonctions de A. Je préférerais ne rien mettre en œuvre dans COM.

En fait, je préférerais ne faire aucune sorte de sérialisation ou similaire (c’est-à-dire que cela exclurait l’utilisation de sockets / pipes / fichiers), mais laisser B transférer tous les paramètres et pointeurs vers A, comme si A faisait partie De plus, les applications C, D et E devraient pouvoir faire de même avec une seule instance de A en cours d'exécution.

J'ajouterais que B est parfois supposé renvoyer un tableau (ou std :: vector ou std :: map) en A dont la taille n'est pas connue auparavant.

Est-ce possible sur Windows Mobile et éventuellement sur d'autres plates-formes?

Était-ce utile?

La solution

Vous ne pouvez pas simplement partager des données entre processus. Je ne recommande pas COM. Les tuyaux n'existent pas dans Windows CE. Votre meilleur itinéraire est soit un fichier mappé en mémoire (comme sur le bureau). ou une file d'attente de messages point à point (comme sur le bureau). Ce qui est meilleur dépend de votre scénario d'utilisation.

Ne pas n'utilisez pas la mémoire de traitement croisé avec VirtualAlloc comme suggéré, car il s'agit d'un hack dangereux, qui n'est pas pris en charge par CE 6.0 ou une version ultérieure. Vous finirez donc par casser sous WinMo 7 et versions ultérieures. .

Je ne recommande pas d'utiliser les messages Windows et WM_COPYDATA. C'est lent, compliqué et très sujet aux erreurs.

Les gens, s'il vous plaît, ne vous contentez pas de répondre aux questions lorsque vous n'avez pas utilisé la plate-forme uniquement pour tenter de gagner des points de réputation. Si vous ne connaissez pas la plate-forme, laissez quelqu'un d'autre l'aider au lieu de l'envoyer en chasse aux oies sauvages.

Autres conseils

Etant donné que vous n'avez besoin que de l'application (B) pour communiquer avec le service (A), pourquoi ne pas simplement utiliser CreateFile et DeviceIoControl avec un ensemble défini de IOCTLs?

Voici la bonne source pour commencer - http: // msdn. microsoft.com/en-us/library/aa446520.aspx Vous décidez quelle option correspond le mieux à vos besoins.

Vous avez couvert à peu près toutes les bases disponibles; COM, tuyaux, sockets, fichiers mappés en mémoire. Tous les processus de Windows ont des espaces mémoire complètement séparés, vous ne pouvez donc rien partager sans utiliser l'un de ces mécanismes IPC.

Sous Windows Mobile, il semble que je me souvienne que tous les processus sont mappés dans le même espace d'adressage. Créez donc des fenêtres de message dans les deux processus avec des noms connus et / ou des noms de classe et utilisez FindWindow dans chaque processus pour rechercher l’autre.

Ensuite, SendMessage avec un identifiant de message défini par WM_APP et un pointeur sur les données à transmettre dans wParam ou lParam.

Si je me trompe et que Mobile partitionne la mémoire de traitement, utilisez simplement WM_COPYDATA qui - sur le bureau, utilise le mappage de mémoire et est donc très rapide - pour envoyer des données entre les applications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top