PocketPC-Programme am HandheldPC


PocketPC und HandheldPC sind grundsätzlich verschiedene Plattformen auf Basis des Betriebssystems Windows CE (Details siehe FAQ "Windows CE, PocketPC, HandheldPC - Begrifflichkeiten"). Grundsätzlich läuft deshalb Software für den PocketPC nicht auf HandheldPCs und umgekehrt. Allerdings besteht die Möglichkeit, plattformspezifische Erweiterungen des PocketPC auf einem HandheldPC bis zu einem gewissen Grad nachzurüsten und dadurch wenigstens einen Teil des sehr viel größeren Angebots an PocketPC-Software lauffähig zu machen.

Ein paar Dinge vorweg, um die Grenzen aufzuzeigen: PocketPCs gibt es erst seit Windows CE 3.0. Da alle HandheldPCs vor HPC 2000 auf älteren Windows CE Versionen basieren, stehen auf solchen Geräten die Chancen schlecht, PocketPC-Programme ausführen zu können. Seit PocketPC 2002 wird nur noch die ARM-Architektur unterstützt. Es gibt keine Möglichkeit, ein PocketPC 2002-Programm auf MIPS- oder SH3/4-basierten HandheldPCs zum Laufen zu bringen. Außerdem sollte man nie aus den Augen verlieren, daß PocketPCs eine fixe Display-Auflösung von 240x320 Bildpunkten bieten. Auf einigen HandheldPCs sind die Programmfenster von PocketPC-Software geradezu winzig, auf HPC Tastatur-Organizern andererseits möglicherweise gar nicht bedienbar, da das untere Viertel des Programmfensters nicht dargestellt wird.

Programme für den PocketPC setzen spezielle APIs und DLLs voraus, die am HandheldPC nicht vorhanden sind. Nachrüsten lassen sich die benötigten Routinen nur bedingt. Einfach alle fraglichen Bibliotheken und Dateien vom PocketPC auf einen HandheldPC zu kopieren, ist aufgrund der komplexen Abhängigkeiten nicht möglich.

Eine erste Hürde ist vielleicht schon das Installieren eines PocketPC-Programms. Läuft das Setup über ActiveSync, scheitert die Installation meist daran, daß der Entwickler die Zielplattform PocketPC vorgegeben hat. In diesem Fall kann man aus dem Installationsverzeichnis des Desktop-PC (meist irgendwo unter "Programme\ Microsoft ActiveSync") das passende CAB-File manuell auf den Handheld kopieren und dort installieren. Auch in diesem Fall erscheint wahrscheinlich eine Warnmeldung, die man jedoch ignorieren kann.

Im ersten Schritt nach der Installation empfiehlt es sich, mit Hilfe von Dependency Walker am Desktop-PC oder ExecutabilityCheck bzw.  PEInfo direkt am HandheldPC zu überprüfen, welche PocketPC-Bibliotheken vom EXE-File benötigt werden. Diese DLLs sollten dann entweder ins Windows-Verzeichnis oder in den selben Dateiordner wie das EXE-File kopiert werden. Details sind in der FAQ "Systembibliotheken" und "Tips zu Dependency Walker" zu finden.

Praktisch alle PocketPC-Programme setzen das Vorhandensein der Standard-Bibliotheken AYGSHELL.DLL und DOCLIST.DLL voraus. Die AYGSHELL.DLL stellt u.a. Funktionen für die Softwaretastatur bereit, ist für die spezielle Menüleiste (MenuBar) des Pocket PC verantwortlich und sorgt dafür, daß Dialogfelder bildschirmfüllend angezeigt werden. Bei Programmen, die entweder gar keine Benutzerschnittstelle mitbringen oder eine komplett eigenständige, reicht es nicht selten, diese beiden Bibliotheken als Dummy ohne nutzbare Funktionen zur Verfügung zu stellen, da beide DLLs per Default beim Kompilieren eines PocketPC-Projekts verlinkt werden, der jeweilige Entwickler aber die Routinen nicht einsetzt. Dazu kopiert man einfach eine beliebige vorhandene DLL und benennt sie entsprechend um.

Die meisten PocketPC-Programme nutzen allerdings tatsächlich die Funktionen der AYGSHELL.DLL, um Menüs und Dialogfelder zu generieren. Ein japanischer Entwickler hat deshalb die wichtigsten Funktionen aus AYGSHELL.DLL und DOCLIST.DLL nachgebildet und bietet die beiden Bibliotheken für ARM- und MIPS-basierte HandheldPCs zum Download an. Noch näher am Funktionsumfang der PocketPC-Originale sind die Bibliotheken im Paket cemenu eines russischen Programmierers, das allerdings nur für ARM-basierte CE.NET Handhelds verfügbar ist.

Insbesondere Spiele, aber auch Movie Player und andere Multimedia-Anwendungen für den PocketPC greifen zudem auf die GameAPI (oder GAPI) zu, die am HandheldPC nicht vorhanden ist. Die benötigten Bibliotheken GX.DLL und GX.LIB zum Nachrüsten für viele aktuelle ARM-Handhelds werden auf der Site wincesoft.de angeboten. Wer die oben angegebenen Bibliotheken AYGSHELL.DLL und DOCLIST.DLL installiert hat, hat möglicherweise auch Chancen, das GAPI-Update 1.2 von Microsoft auf einem ARM-, MIPS- oder SH3-Handheld erfolgreich zu installieren (noch nicht getestet).

Ein weiteres Problem: Die Microsoft Foundation Class Bibliothek MFCCE300.DLL gibt es in einer speziellen Version für PocketPCs, so daß vom Vorhandensein dieser Bibliothek allein noch nicht darauf geschlossen werden kann, PocketPC-Programme ließen sich problemlos auf einem HPC 2000-Gerät ausführen. Nutzt ein PocketPC-Programm Funktionsaufrufe, die mit der HandheldPC-Version der MFCCE300.DLL zu einem Fehler führen, wird es schwierig. Mit der PocketPC-Version dieser Bibliothek einfach die originale DLL am HandheldPC zu überschreiben, führt zwangsläufig zu Kompatibilitätsproblemen mit HPC-Software und sogar Teilen des Betriebssystems selbst. Ein möglicher Ausweg besteht darin, die PocketPC-Bibliothek unter einem anderen Namen zur Verfügung zu stellen - z.B. als MFCCE301.DLL - und den DLL-Aufruf in der ausführbaren Datei des PocketPC-Programms entsprechend zu ändern. Einen vergleichsweise einfachen und komfortablen Weg dahin bietet das Tool ExecutabilityCheck.

Einen deutlich komfortableren Weg zum Umgehen der Inkompatibilitäten von PocketPC und HandheldPC bietet das Tool RedGear von Alpaxo Software. RedGear ermöglicht es, selbst komplexe Anwendungen für aktuelle Windows Mobile Versionen auf Geräten ab HPC 2000 auszuführen. Mit dem Einbinden mehr oder weniger vollständig nachgebauter DLLs muß sich der RedGear-Anwender nicht abplagen. Der Komfort hat aber seinen Preis, in doppelter Hinsicht: Zum einen ist RedGear ein kommerzielles Tool und kostet Geld. Zum zweiten läuft RedGear im Hintergrund permanent mit und belegt damit wertvolle Systemressourcen.

(Herzlichen Dank für die fachkundige Unterstützung an Wolfgang Rolke)


Einen Fehler gefunden? Einen Link, der ins Leere weist? Anregungen zu dieser Seite?
Nehmen Sie Kontakt mit uns auf: webmaster@rothberger.net oder per Beitrag im Forum