Frage

In einem C ++ Projekt (das heißt kein .NET) auf Windows Mobile, ich bin auf der Suche nach einer Möglichkeit, zwischen zwei unabhängig voneinander laufenden Anwendungen auf einfache Weise zu kommunizieren. Anwendung A würde einen Dienst ausführen, während Anwendung B dem Benutzer einig Funktionalität bieten würde - für die B einig A Funktionen zu nennen hat. Ich würde lieber nicht gehen durch irgendetwas in COM zu implementieren.

In der Tat würde ich es vorziehen, nicht jede Art von Serialisierung oder ähnliches zu machen (dh diese Buchsen / Leitungen / Dateien mit ausschließen würde), sondern haben B alle Parameter und Zeiger über A passieren, genau wie wenn ein Teil waren von B. auch C apps, D und E sollten das gleiche mit nur einer Instanz eines laufenden tun können.

Ich soll dieses B hinzufügen, manchmal sollte ein Array (oder std :: vector oder std :: map) bis A zurückzukehren, wo die Größe ist bisher nicht bekannt.

Ist das möglich auf Windows Mobile und möglicherweise auch andere Plattformen?

War es hilfreich?

Lösung

Sie können nicht nur Daten über Prozesse teilen. Ich weiß nicht COM empfehlen. Die Rohre sind nicht in Windows CE. Ihre beste Route ist entweder eine Memory-Mapped-Datei (wie auf dem Desktop) oder ein Punkt Nachrichtenwarteschlange (nichts wie auf dem Desktop) zu zeigen. Was ist besser, hängt von Ihrem Einsatzszenario.

Do nicht versuchen, Cross-Prozess mit VirtualAlloc Speicher zu verwenden, wie vorgeschlagen, wie es ein unsicherer Hack unsicher ist und nicht auf CE 6.0 oder höher unterstützt, so werden Sie unter WinMo 7 brechen am Ende und später .

Ich empfehle keine Fenster Meldungen und WM_COPYDATA verwenden. Es ist langsam, kludgy und sehr fehleranfällig.

Menschen, bitte Fragen einfach nicht beantworten, wenn Sie die Plattform nicht verwendet haben, nur um zu versuchen Ruf Punkte zu gewinnen. Wenn Sie nicht über die Plattform kennen, lassen Sie jemand anderes den Kerl helfen, anstatt ihn auf einer Reihe von Ungereimtheiten zu senden.

Andere Tipps

Da brauchen Sie nur die Anwendung (B) mit dem Service (A) zu kommunizieren, warum Sie nicht nur verwenden CreateFile und DeviceIoControl mit einer definierten Menge von IOCTLs?

Hier ist die gute Quelle für den Anfang - http: // msdn. microsoft.com/en-us/library/aa446520.aspx Sie entscheiden, welche Option die beste Lösung für Ihre Bedürfnisse ist.

Sie haben so ziemlich alle Basen bedeckt zur Verfügung; COM, Rohre, Buchsen, abgebildet Speicherdateien. Alle Prozesse in Windows haben völlig getrennte Speicherplätze, so können Sie nichts teilen, ohne eine dieser IPC-Mechanismen.

Unter Windows Mobile scheine ich mich zu erinnern, dass alle Prozesse in demselben Adressraum abgebildet werden. So erstellen Nachrichtenfenster in beiden Verfahren mit bekannten Namen und oder Klassennamen und verwenden Findwindow in jedem Prozess die andere zu finden.

Dann Sendmessage mit einer WM_APP definierten Nachrichten-ID und einem Zeiger auf die Daten in WParam lParam oder zu übertragen.

Wenn ich falsch liegt und Mobil tut Partition Prozess-Speicher, dann nur WM_COPYDATA verwendet werden, die - auf dem Desktop verwendet Speicher-Mapping und so ist wirklich schnell -. Daten zwischen den Anwendungen senden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top