Systembibliotheken


Die meisten Windows CE-Programme sind abhängig vom Vorhandensein bestimmter Systembibliotheken. Diese Bibliotheken oder DLLs stellen häufig genutzte Funktionen bereit z.B. zum Öffnen und Speichern von Dateien, zum Abfragen von Benutzereingaben per Tastatur oder Touchscreen, zur Darstellung von Eingabe- und Mitteilungsfenstern u.v.m. Ein "nackter" HandheldPC 2000 bringt allein schon über hundert DLLs mit. Viele Programme, die ein Benutzer zusätzlich installiert, stellen weitere Bibliotheken zur Verfügung.

Fehlt eine benötigte  DLL, wird beim Starten des jeweils abhängigen Programmes eine Fehlermeldung angezeigt, die leider keinen genauen Aufschluß darüber gibt, welche Komponente vermißt wird:

Mit Hilfe von speziellen Tools wie Dependency Walker am Dektop-PC (das fragliche EXE-File muß vom Handheld auf den Desktop-Rechner kopiert werden) oder ExecutabilityCheck und PEInfo direkt am Handheld kann man analysieren, welche Bibliotheken aufgerufen werden.


Dependency Walker listet übersichtlich alle benötigten DLLs auf.

Anhand der in den beiden Tools aufgelisteten Abhängigkeiten kann nun überprüft werden, welche Bibliothek am Handheld fehlt. Mit Hilfe von Dependency Walker kann man sogar kontrollieren, ob eine DLL die vom EXE-File benötigten Funktionen bereitstellt - wichtig vor allem beim Einsatz von Dummy-Bibliotheken, um PocketPC-Software ausführen zu können. Rechts oben im Programmfenster werden alle exportierten Funktionen einer markierten DLL angezeigt (je mehr desto besser). Und mit Hilfe der Adressen in der Spalte "Entry Point" kann man sehen, welche Funktionen Code enthalten, welche dagegen nur Dummy-Funktionen sind. Details zur Benutzung von Dependency Walker sind in einer eigenen FAQ zusammengefaßt.

Zu beachten ist auch der Pfad, unter dem die DLL gesucht wird, wohin also eine fehlende Bibliothek kopiert werden muß:

Details zur Suchreihenfolge sind im Microsoft Developer Network  dokumentiert.

Zu wissen, welche Bibliotheken ein Programm benötigt, ist aber erst die halbe Miete. Schließlich muß die vermißte DLL noch zur Verfügung gestellt werden. Im einfachsten Fall ist - wie eben schon erwähnt - die DLL auf dem Handheld zwar vorhanden, aber der Suchpfad stimmt nicht; hier reicht das Umkopieren der Bibliothek. Fehlt die DLL dagegen tatsächlich, wird es schwierig.

Recht simpel lösen läßt sich das Problem einer fehlenden DLL, falls die Bibliothek zwar verlinkt ist, die darin enthaltenen Funktionen aber nicht aufgerufen werden. Dies ist häufig dann der Fall, wenn ein Entwickler die per Default für eine Plattform vorgesehenen Standard-Systembibliotheken nicht abwählt, obwohl er die dort zur Verfügung gestellten Routinen gar nicht nutzt. Hier reicht es, eine Dummy-Bibliothek anzubieten, z.B. eine vorhandene DLL zu kopieren und unter dem benötigten Namen zu speichern.

Wird dagegen eine funktionsfähige Bibliothek benötigt, führt kein Weg daran vorbei, sich die benötigte DLL nachträglich zu besorgen. Eine Reihe von häufig verwendeten DLLs ist über einschlägige Internet-Suchmaschinen durchaus zu finden. Die wichtigsten stellen wir hier vor:

Microsoft Foundation Class Bibliotheken (MFCCExxx.DLL)

Die Microsoft Foundation Class Bibliothek MFCCExxx.DLL wie auch die ebenfalls häufig benötigte Object Linking & Embedding Bibliothek OLECExxx.DLL ist auf jedem Windows CE-Gerät vorhanden. Allerdings gibt es diese DLLs in unterschiedlichen Versionen, je nach Version von Windows CE. HPC 2000-Geräte etwa bringen MFCCE300.DLL und OLECE300.DLL mit, HPC 2.11/pro dagegen MFCCE211.DLL und OLECE211.DLL. Viele Programme, die für HPC 2.11/pro geschrieben wurden, setzen explizit das Vorhandensein der MFCCE211.DLL voraus. Unter HPC 2000 lassen sich solche Programme dann nicht starten.

Der umgekehrte Weg, also das Installieren der MFCCE300.DLL auf z.B. einem HPC 2.11/pro Gerät, funktioniert übrigens nicht. In den Bibliotheken ist die Mindestversion des Betriebssystems fest vorgegeben.

Wie der Name schon vermuten läßt, stammen diese Bibliotheken von Microsoft. Software-Entwickler dürfen sie unter bestimmten Voraussetzungen im Bundle mit ihren Produkten weitergeben. Microsofts "End User Licence Agreement" (EULA) verbietet es aber, die DLLs einzeln zu verbreiten. Entsprechende Download-Angebote im Internet sind also illegal, gleichwohl vorhanden...

PocketPC Bibliotheken (AYGSHELL.DLL, DOCLIST.DLL, GX.DLL)

PocketPC-Programme setzen spezielle Erweiterungen, 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.

Nichtsdestotrotz sind viele PocketPC-Programme mit geringem Aufwand auf einem HandheldPC lauffähig zu machen. Nicht selten reicht es, die Standard-Bibliotheken AYGSHELL.DLL und DOCLIST.DLL des PocketPC 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.

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.

Ein weiteres Problem: Die oben erwähnte 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.

Weitere Details zum Thema "PocketPC-Software auf dem HandheldPC" finden sich in einer eigenen FAQ.

Kanji Controls (KCTRL.DLL)

HandheldPCs erfreuen sich vor allem in Japan großer Beliebtheit. Entsprechend rege ist die Entwicklerszene dort, viele Programme für den HandheldPC kommen aus Japan. Japanisch beschriftete Oberflächenelemente werden von der Bibliothek KCTRL.DLL zur Verfügung gestellt. Ins Englische übersetzte Programme aus Japan setzen gelegentlich das Vorhandensein dieser DLL voraus. Download ist möglich von der Site des japanischen Entwicklers Eiichiro Ito.

(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