Windows Mobile

Ein Windows Mobile ABC: I wie Interprozesskommunikation

Interprozesskommunikation (Interprocess Communication, kurz IPC) ist der Austausch von Informationen
zwischen verschiedenen Prozessen auf einem Computer.
Per IPC kann ein Programm Daten an ein anderes Programm oder eine andere Instanz senden.
Ein gutes Beispiel wann IPC auch auf Windows Mobile sinnvoll sein kann ist das abfangen von SMS über eine sogenannte "MAPI Rule Dll".
Die "MAPI Rule Dll" wird innerhalb der Windows Mobile Mail Applikation geladen.
Eine Anwendung die beispielsweise auf bestimmte Steuerungsbefehle die per SMS gesendet wurden reagieren soll muss also entweder direkt in die DLL eingebettet werden oder von dieser Benachrichtigt werden.
Wer sich dies einmal anschauen möchte findet unter http://windowsmobileapps.codeplex.com/ eine Beispielimplementation dafür.
 
Das erwähnte Beispiel nutzt die WM_COPYDATA Nachricht zur Interprozesskommunikation, womit wir auch schon bei der ersten IPC Methode angekommen sind.
Eine kleine Auflistung welche IPC Methoden es gibt:
 
WM_COPYDATA
WM_COPYDATA ermöglicht das Versenden von Information an ein Fensterhandle über die SendMessage Funktion, und sollte somit eigentlich für jeden Entwickler
der schon einmal eine Windows Message versendet hat kein Problem darstellen.
 
SOCKETS
Sockets ermöglichen die Kommunikation auf Basis von TCP/IP. Einziger Unterschied bei der Verwendung von Sockets zur IPC ist das die Bindung der Sockets nur auf
den Localhost erfolgen sollte, es sei denn die IPC ist auch über das Netzwerk gewünscht. Wobei man dann auch wieder eher von eine Client/Server Anwendung sprechen kann.
 
Memory Mapped Files
Memory Mapped Files sind virtuelle Dateien die zwischen Prozessen geteilt werden können. Somit kann ein Prozess beispielsweise Informationen in diese Datei schreiben,
während ein anderer Prozess diese ausließt und auswertet.
 
Stream Treiber
Die Stream Treiber Schnittstelle wird am einfachsten von einem Service erzeugt. Vorstellen kann man sich das ganze wie bei einen COM Port an den man Befehle reinschreiben kann und die Antwort
dementsprechend auslesen kann.
 
Registry & SNAPI
Die Registry kann auf einfache Art und Weise verwendet werden um Informationen zwischen Prozessen auszutauschen.
Seit der Einführung des State und Notification Brokers kann die IPC Gegenstelle auch sofort über Änderungen informiert werden ohne ein Polling zu verwenden.
 
 
All die aufgeführten Methoden haben eines gemeinsam: Es gibt Sie auch auf dem Desktop! Somit werden viele Leute in Ihrer Entwicklerlaufbahn vermutlich schon einmal darüber gestolpert sein.
Ausnahme: Registy & SNAPI, wobei dies auf dem Desktop über die RegNotifyChangeKeyValue Funktion auch zu bewerkstelligen ist.
 
Ein weitere Methode die es aber nur auf Windows Mobile bzw. auf Windows CE gibt ist die Verwendung von Message Queues.
Sie bilden somit die Ausnahme und sind für manch einen Entwickler etwas neues.
Angenehm finde ich die einfache Verwendung von Message Queues:
Ein Prozess erstellt mit der Funktion CreateMsgQueue die Message Queue. Auf das daraus resultierende Handle kann man in einem Thread prima mit WaitForSingleObject warten, und sobald jemand etwas in die Queue schreibt mit ReadMsgQueue auslesen.
Die Gegenseite kann entweder mit OpenMsgQueue oder CreateMsgQueue die Queue öffnen und mit WriteMsgQueue schreiben.
 
– Patrick

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s