Entwickeln von Anwendungen für
Windows CE
Frank Lange
Technologieberater
Microsoft GmbH
[email protected]
Agenda
Entwickeln von Anwendungen für Windows CE
• Einleitung
•Der Trend „Mobilität“
•Windows CE Historie
•Gerätevielfalt und Abgrenzung
•Platform Builder
• PPC Endanwender-Tools
• Programmierung
•eMbedded Visual Tools 3.0
•APIs
• Zusammenfassung und Literatur
Trend: Mobilität
Unterwegs mit Handy, Taschenrechner, Wörterbuch,
Stadtplan, Adreßbuch, Notizblock, Laptop, Modem,
Radio (Verkehrsfunk,...) ?
WinCE offline benutzen:
Daten zur Hand, über PC/Netz synchronisieren
Evtl. Laptop-Ersatz:
Blitzschnelles Erwachen aus Sleep-Modus
Stromsparend: meist keine Festplatte, gering getaktete CPU
Handliche Abmaße
Übersichlicher weil weniger Fensterschieberei
Age Of Empires läuft nicht auf CE (d.h. Mitarbeiter arbeitet)
Trend: Mobilität (2 von 2)
Online über Mobilfunknetze
Status Quo:
GSM = Global System for Mobile Communication
Bezahlt wird die Verbindungszeit...
Kommend:
GPRS = General Packet Radio Service
Immer Online: Bezahlt wird belegte Bandbreite
(Datenpakete)
Zukunft in der Geschäftswelt?
UMTS = Universal Mobile Telecommunications System
siehe August 2000 in Deutschland: 6 Firmen haben je
16Mrd DM teure Lizenz für Frequenzblöcke vom Staat
ersteigert.
Historie von Windows CE
Begraben 1993: „WinPad“
Abgespecktes Betriebssystem zu Windows 3.1-Zeiten mit
Schrifterkennung etc.
Problem: zu teuer und zu starke PC-Architektur.
Begraben: „Pulsar“
Handgerät mit wenigen Bendienelementen. Zielgruppe waren alle,
denen ein PC zu kompliziert war.
Problem: „Markt ist noch nicht reif“
„Pegasus“ (Beta des Windows CE)
Mit abgespecktem Win32 API und Emulator auf PC.
November 1996: Windows CE ist freigegeben
Auf dem Markt erscheinen Handheld PCs. Diverse OEMEntwicklungen starten (AutoPC...).
... seit Anfang 2000: Windows CE 3.0
(Cedar, Rapier SDK)
Windows CE Gerätevielfalt
Handheld PC
Handheld PC Pro
mit MS Pocket Access und VGA-großen Bildschirm
Pocket PC
Bezeichnung vor CE3.0: “Palm PC”
Auto PC
Spezielle Embedded Systems
Drucker, Haushaltsgeräte, Maschinen
“Konsumer-Bereich”
AutoPC
(hier: Clarion)
Set-top Box
(hier: AT&T)
Pocket PCs
(hier: Casio, HP, Compaq, Symbol)
Spielekonsole
Internetbildschirm
(hier: Sega Dreamcast)
(hier: Anigma WebMAN)
Handheld PCs
(Casio, HP, Compaq, Ericcson, Hitachi,...)
Waschmaschinen, Kameras,...
Geschäftsbereiche
Kassensysteme
Zapfsäule
Barcode Scanner
Messgeräte
Verkehrs-Leitsysteme
Computer-Terminals
LKW PC, GPS
MagnetstreifenLeser
Abgrenzung zu NT Embedded
PBX
Switches
Kopierer
Drucker
Backoffice-Funktionalität,
Serverkomponenten,
Mehrbenutzerverwaltung,
Spezielle Security-Features (z.B. Bankautomaten),
Größere Caching-Eigenschaften,
30sec Boot akzeptabel
NT4 Embedded: seit Ende 1990
NT2000 Embedded: später
Platform Builder, Auslieferung des OS
OEMs entwickeln Hardware mit WinCE im ROM
(OEM := Original Equipment Manufacturer)
Windows CE Platform Builder
Aufsetzen z.B. eines WinCE PCs. Hardwarevoraussetzungen genau lesen!
Hardware-Treiber sind nicht kompatibel zu Windows 9x/ME oder
NT/2000!
mit dem Tool „Platform Builder“ werden die benötigten
Softwaremodule zusammengestellt
Agenda
Entwickeln von Anwendungen für Windows CE
• Einleitung
•Der Trend „Mobilität“
•Windows CE Historie
•Gerätevielfalt und Abgrenzung
•Platform Builder
• PPC Endanwender (Tools/Apps)
• Programmierung
•eMbedded Visual Tools 3.0
•APIs
• Zusammenfassung und Literatur
Tools im ROM des PPC
Today (Owner Info, Kalendereintrag, In-/Sentbox, anstehende
Tasks)
Calculator, Calendar, Contacts, Internet Explorer,
Microsoft Reader, Pocket Word, Tasks, Windows Media
Programs:
Connections (ActiveSync)
File Explorer
Infrared Receive
MS Money, Pocket Excel, Inbox, Notes
Einstellmöglichkeiten via PPC-Settings
Settings / Personal:
Buttons
Input
Menus
Owner Information
Password
Sounds&Reminders
Today
Settings / System:
About
Align Screen
Backlight
Clock
Contrast
Memory
Power
Regional Settings
Remove Programs
Settings / Connections:
Modem
Network
PC
ActiveSync: PC-WinCE-Verbindung
Synchronisierte Dateien via ActiveSync:
C:\Dokumente und Einstellungen\franklan\Eigene
Dateien\Pocket_PC My Documents\
ActiveSynch: Tools / Options / Rools / Conversion Settings
Copy/Paste im Explorer: aber nicht Systemdatenbanken
(Verzeichnis „Databases“)
genutzt auch von den
Entwicklungstools
Weitere Anwendungen
in Zusammenhang mit Hardware: Speicherkarten,
Netzverbindungen, Scanneraufsätze, VGA-Ausgang...
aus dem Internet: z.B. Schachprogramm, Stadtpläne, ...
verschiedene Softwareentwickler (z.B. Links im Internet):
demnächst auch MS SQL Server 2000 WinCE Edition
do it yourself! – kommende Folien.
Agenda
Entwickeln von Anwendungen für Windows CE
• Einleitung:
•Der Trend „Mobilität“
•Windows CE Historie
•Gerätevielfalt und Abgrenzung
•Platform Builder
• PPC Endanwender-Tools
• Programmierung
•eMbedded Visual Tools 3.0
•APIs
• Zusammenfassung und Literatur
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
Entwicklungsumgebung
Windows CE eMbedded Visual Tools 3.0
Vorgänger: Windows CE Toolkits for VC++ and VB
(Erforderte: Visual Studio 6)
Programmiersprachen
eMbedded Visual Basic
eMbedded Visual C++
SDKs
Pocket PC, Palm-size PPC, Handheld PC
Preis
$15 Porto und Verpackung (innerhalb US: $7,50)
siehe http://www.microsoft.com/mobile/developer/
eMbedded VC vs. VB
Persönliche Entscheidungen
eVB erzeugt zu interpretierendes VB-Skript (CPU-unabh.),
eVC erzeugt CPU-abhängigen Code
VC bringt Performance (falls wirklich benötigt),
spart Strom weil Interpreter-Overhead fehlt
eVB keine volle VB-Syntax
eVC volle C++-Sprache (Codeteile einfacher portierbar)
Nicht mit VB:
Treiber, COM-Komponenten, ActiveSync-Filter
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
Hello World - Variationen
eVB: fensterbasierend mit Form
eVB: stille App startet MessageBox
eVC: stille App startet Message Box
eVC: fensterbasierende App
eVB + eVC: COM-Komponente nutzen
eVB mit Form: “Hello World”
HPC Pro
PPC
Private Sub Command1_Click()
MsgBox “Hello !“
End Sub
eVB: Einfache Message Box
eVB: Formless Project
eVC: Pocket PC Application
REM eVB formless Project
Sub Main()
MsgBox "Hallo !", , "Demo App"
End Sub
eVC: Einfache Message Box
Pocket PC Application für MIPS und x86em
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{ return MessageBox ( NULL, L"Hallo!", L"Demo App", MB_OK ); }
eVC: Fensterbasierend via SDK
Pocket PC Application für MIPS und x86em,
„a typical „Hello World!“ application
Headerdateien
#include "stdafx.h"
#include "FlgDemo.h"
#include <commctrl.h>
#include <aygshell.h>
#include <sipapi.h>
//
//
//
//
//
mit windows.h
mit resource.h (Command IDs,...)
WinMain(...)
InitInstance(...)
MyRegisterClass(...)
WndProc(...)
//
//
//
//
ruft InitInstance(), Msg Loop
MyRegisterClass(), CreateWindow
Fensterklasse registrieren
Callback des Fensters
Fensterfunktion
WM_COMMAND
WM_CREATE
WM_PAINT
WM_DESTROY
WM_SETTINGCHANGE
//
//
//
//
//
About->Dialog, OK->WM_CLOSE
SHCreateMenuBar: Menübalken unterer Rand
DrawText „Hello World!“
DestroyWindows(cmdBar), PostQuitMessage()
hier: Input Panel Handling
PPC: Systemmenüs, Fullsizing
PPC: Input Panel Handling
Funktionen
eVC: Fensterbasierend via MFC
1/3
PPC MFC AppWizard (exe) für MIPS und x86em, Dialog based
Startcode
CDemoApp theApp;
// MFC-AppPointer für WinMain() setzen
CDemoApp : public CWinApp
BOOL CDemoApp::InitInstance()
{
CDemoDlg dlg;
//
m_pMainWnd = &dlg;
//
int nResponse = dlg.DoModal();//
return FALSE;
//
}
meine Dialoginstanz
MFC Setting
Dialog durchführen
MFC: ich habe fertig!
CDemoDlg : public CDialog
CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDemoDlg::IDD, pParent)
// Resource laden
{...}
CDemoDlg::DoDataExchange(...)
// Controls<->Variablen
BOOL CDemoDlg::OnInitDialog(...)
// Fenstergröße Full Screen
eVC: Fensterbasierend via MFC
Message Box hinzufügen
1. Dialog Resource: Command Button hinzufügen
2. void CDemoDlg::OnButton1()
{ MessageBox ( L"Hello World!" ); }
3. Dialogtitel bestimmen durch App-Konstruktor:
m_pszAppName = L"Demo";
2/3
eVC: Fensterbasierend via MFC
3/3
PPC MFC AppWizard (exe) für MIPS und x86em,
diesmal: SDI bzw. SDI with DocList (MDI nicht für PPC)
Programmende:
a) Start/Settings/System/Memory/Running Programs -> Stop
b) AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);
MFC-Klassen allgemein: teilweise geänderte Funktionmalität im
Vergleich zu PC-MFC (siehe immer Onlinehilfe).
eVB+eVC: App mit COM-Komponente
VC: ATL-COM-Komponente
VB: App
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
Programmierunterstützende Tools
Remote Spy++
Remote Registry Editor
Remote Heap Walker
Remote Process Viewer
Remote Zoomin
Remote File Viewer
Error Lookup
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
Unicode: Begriffsdefinitionen
ASCII Zeichensatz (7Bit):
(American Standards Committee for Information Interchange)
Erweiterter ASCII Zeichensatz („IBM Zeichensatz“, 8Bit):
128 Erweiterungszeichen, durch Code Paging umschaltbar
ANSI-Zeichensatz: Ein erweiterter ASCII-Zeichensatz mit festgelegter Codepage 1252.
OEM Zeichensatz: Ein erweiterter ASCII-Zeichensatz der für die DOS-Boxen verwendet
wird (abh. von Ländereinstellung).
MBCS (Multibyte Character Sets): ein oder mehr Byte je Zeichen
DBCS (Double Byte Character Set)
Spezialfall eines MBCS: 1 oder 2Byte je Zeichen
Wenn 2 Byte-Zeichen, dann ist erstes Byte in spezielles
Lead Byte -> quasi das „ANSI für den ostasiatischen Raum“
Wide Character-Zeichensatz: Festgelegt sind 2 Byte je Zeichen (z.B. Unicode)
Unicode: ein Standard für alle Zeichensätze
Startet mit den ASCII-Codes.
Unicode: auf PC
VB: sowieso...
Automation-Interfaces: Muß!
VC:Win32API:
je nach #define‘s
CRT:
unterschiedliche Funktionsnamen
TCHAR.H:
Makros für Datentypen
MFC:
CString-Abstraktion
#define UNICODE // für die Win32 Header Files
#define _UNICODE // für die CRT Header Files (C-Runtime)
// Als ANSI-Erweiterung hier „_“ nötig
#include <windows.h>
//...(viel Spass beim Portieren!)
unsigned short* s = L"Hallo!";
unsigned short s2[100];
wcscpy(s2,s);
MessageBox(NULL,s2,s,MB_OK);
//...
// z.B. in Win32 Headers
#ifdef UNICODE
#define MessageBox
#else
#define MessageBox
#endif // !UNICODE
MessageBoxW
MessageBoxA
Typisch PC… z.B. ANSI + Automation
#include <winnls.h>
BSTR MallocOLEString( const char* szANSI ) {
int
nStrLen =strlen(szANSI);
int
nLen /*BSTR*/;
BSTR
bstr;
nLen = MultiByteToWideChar(CP_ACP, 0, szANSI, nStrLen,NULL,NULL);
bstr = SysAllocStringLen(NULL, nLen);
MultiByteToWideChar(CP_ACP, 0, szANSI, nStrLen, bstr, nLen );
return bstr;
}
#define FreeOLEString(bstr) ::SysFreeString (bstr)
char* MallocStrFromBSTR( BSTR /*in*/ bstr) {
char* sBuffer;
int
nLen = ::SysStringLen(bstr);
int
nBytes;
// ANSI-String ohne Nullbyte
nBytes=WideCharToMultiByte(CP_ACP, 0, bstr, nLen,NULL,NULL,NULL,NULL);
sBuffer = (char*) malloc ( nBytes+1 );
WideCharToMultiByte(CP_ACP, 0, bstr, nLen, sBuffer, nBytes,NULL,NULL);
sBuffer[nBytes]=(char)0;
return sBuffer; }
#define FreeStr(s) ::free(s)
PC: Unabhängige Codeteile
Eigener Quelltext
#include <windows.h>
#include <winnls.h>
System-Header Files
typedef unsigned short WCHAR;
TCHAR*
TCHAR
s = _T("Hallo! ");
s2[100];
_tcscpy(s2,s);
MessageBox(NULL,s2,s,MB_OK);
#ifdef UNICODE
typedef WCHAR
#define _T(x)
#define _tcscpy
#else
typedef char
#define __T(x)
#define _tcscpy
#endif
TCHAR; // WINNT.H
L ## x // TCHAR.H
wcscpy // TCHAR.H
TCHAR; // WINNT.H
x
// TCHAR.H
strcpy // TCHAR.H
WinCE - Code
Eigener Quelltext – wie zuvor!
#include <windows.h>
#include <winnls.h>
TCHAR*
TCHAR
s = _T("Hallo! ");
s2[100];
_tcscpy(s2,s);
MessageBox(NULL,s2,s,MB_OK);
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
PPC: UI-Programmierung
Navigationsleiste
Client Area
„New“
Anwendungsmenü
SIP (Soft Input Panel)
Anwendungsname
Start
Menü
Client
Area
New
AnwendungsMenü
SIP
UI-Richtlinien für PPCs
Navigationsleiste oben
Menü unten
Wichtigstes nicht durch virtuelle Tastatur überdecken lassen
Dialoge belegen gesamten Bildschirm
– keine Fensterschieberei!
UI mit Kontrollelemente
MS ActiveX Control Pack
www.microsoft.com/windowsce
Kostenloses Downloading
auch ausgeliefert mit VBCE 6.0
MS Kontrollelemente
Image, Picturebox
FileSys, Winsock, MSComm
TreeView, ListView, ImageList
Grid, Common Dialogs, TabStrip
SQL Server 2000 WinCE Edition
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
App Platform Diagram
Eigene Anwendungen
VB
MFC
ADO
ATL
CEF
HTML
JScript
XML
XSL
GAPI
pIE
POOM
Rapier
Shell
APIs
WinInet/URLMon
WinCE 3.0 (Cedar): Win32, OLE, Winsock, etc
CEF = Common Executable Format (CPU-unabh. Kompilat)
GAPI = Game API
POOM = Pocket Outlook Object Model
Spezielle APIs
Runtime APIs
VB, MFC, ATL, ADO, CEF (Common Executable Format)
Pocket IE-Anwendungen
HTML, XML, Skriptspachen etc.
GAPI
Vergleichbar zu DirectX auf PCs: geräteunabhängig für Grafikarrays,
Bedienknöpfe etc.
POOM (Pocket Outlook Object Model)
Rapier Shell APIs
Spezielles UI der PPCs
ActiveSync API
ADO
ActiveSync API
Desktop PC
ActiveSync Manager
IReplNotify
ActiveSync Module
IReplStore
Windows CE Gerät
Data
Stream
ActiveSync Manager
ActiveSync Module
IReplObjHandler
IReplObjHandler
Eigene App
Eigene App
IReplStore-Methoden
Quellen-Manipulation
Initialize, GetStoreInfo, CompareStoreIDs
Objekt-Enumeration
FindFirstItem, FindNextItem, FindItemClose
Objekt-Manipulation
CompareItem, IsItemChanged, IsItemReplicated, UpdateItem
Manipulation-Handhabung
ObjectToBytes, BytesToObject, FreeObject, CopyObject, IsObjectValid
User interface
ActivateDialog, GetObjTypeUIData, GetConflictInfo, RemoveDuplicates
Verschiedenes
ReportStatus, IsFolderChanged, GetFolderInfo
IReplObjHandler-Methoden
Setup
Vorbereitung auf Datentransfer
Reset
Freigabe von Ressoucen
GetPacket
Serialisierung eines Objekts aus dem Datenspeicher
SetPacket
De-Serialisierung von Bytes in den Datenspeicher
DeleteObject
Datenhaltung
Handgestrickt
ADOCE bis V2.1

ADOCE ab V3.1 und SQL Server 2000 WinCE-Edition
Was ist ADO CE?
“Windows CE size” ADO
kompatible ADO-Untermenge
Neue Datenbank-Funktionalität für Windows CE
Datenbank-unabhängige Quelltexte und bald Unterstützung
für verschiedenste Datenquellen
ADO/ADOCE Objektmodell
Connection
Properties
Errors
ADOCE Objektmodell (ähnlich ADO-R 1.0)
Recordset
Properties
Fields
Command
Properties
Parameters
Recordset-Objekt
Methoden
Properties

Open, Close, Clone

Bookmark, BOF, EOF

Addnew, Delete, [Cancel]Update

AbsolutePosition

Move, MoveFirst, Last, Previous,
Next

RecordCount, Editmode

AbsolutePage, PageSize, PageCount

Source, Locktype, ActiveConnection,
CursorType


GetRows
Supports
ADO CE Architektur
Derzeit
ADO CE
SQL und Query Engine
Windows CE
Object Store
CDB Database
File
H/PC und H/PC Pro
kein Auto-Synch
nur H/PC Pro
Auto-Synch
Datei im RAM oder
Installable Storage
DB Anwendungs-Architektur
Desktop
Device
MyApp.exe
MyCEApp.exe
Filter/Synch
Microsoft Access,
Microsoft SQL Server
Daten-Synchronisation
Desktop-Daten
ODBC Quelle
offiziell MDB und SQL Server unterstützt
Filtern von Daten
Gerät, zu/von dem Daten zu übertragen
Auswahl, welche Daten
Via Bedienoberfläche oder API
Verfügbar für H/PC and H/PC Pro
Synchronisation der Daten
Auto-Synch des Gerätes mit der Datenquelle
Auf H/PC Pro: CDB Datenbanken auf dem Gerät möglich
HPC Pro: DB-Unabhängigkeit
Pocket Access
Apps (ADOCE)
SQL Server 7
Synch Manager
CDB
VB Demo zu ADOCE
Dim RS
Set RS = CreateObject("adoce.recordset")
RS.Open
"Select * from authors", _
"\My Documents\pubs.cdb", _
adOpenKeyset, adLockOptimistic
...
RS.Close
RS.Fields.Count
RS.Fields(n).Name
RS.Fields(n).Value
RS.MoveFirst
RS.MoveNext
...
RS.AddNew
...
RS.Update
SQL Server 2000 Windows CE Edition (Beta)
Systemvoraussetzung
Windows CE 2.11 oder höher
700K Platz auf x86-Geräten
Kompatible Datentypen zu SQL Server 2000 auf PC
Transaktionen, Default-Feldinhalte, Referenzielle Integrität etc.
gab‘s beim bisherigen ADOCE so nicht!
Auch Server-Verbindung über Internet (HTTP) und drahtlosem Netz
möglich. Ânonyme Pull-Subskription oder Merge-Replikationen
direkt mit Server möglich.
ADOCE 3.1 baut auf OLEDBCE auf. SSCE ist ein OLEDBCE-Provider.
Referenzbeispiel: UPS (Paketdienst) baut AuslieferungsTrackingsystem darauf auf
Bisheriger DB-Zugriff (ohne SSCE)
eVC 2.0
eVB 2.0
ADO CE v2.0
Replikation,
QP
CEDB/PegDB API
Active
Sync
ODBC
Jet
Neuer Datenzugriff (mit SSCE)
eVB 3.0
ADO
CE
v3.1
Active
X
Objects
eVC
3.0
OLEDB CE
SQL Server 2000 Windows CE Edition
OLEDB
QP/Cursor Engine/ES
OLEDB
Storage Engine / Repl
Tracking
Client
Agent:
Replication
and
Remote
Data
Access
CLIENT
IIS
HTTP
SERVER
Server
Agent:
Replication
and
Remote
Data
Access
Schritte für SSCE Replikation
DB-Admin richtet Publikation ein
Anwendung auf dem CE-Gerät installieren
Anwendung erzeugt Subskription (Kontrollelement)
Anwendung macht Daten-Update (Kontrollelement)
Änderungen auf der DB werden überwacht (Logging)
Anwendung leitet Synchronisation ein
(Kontrollelement)
Konflikte werden am Publisher gelöst
Replikationsverbindung
CLIENT
Appl
SSCE
Client
Agent
SSCE
DB
SERVER
SQL Server
Reconciler
SSCE
I
I Server
S Agent
SQL Server
Replication
Provider
SSCE
Replication
Provider
.IN
.OUT
SQL
DB
Remote-Daten Zugriffsmethoden
Pull
holt Daten vom Server zum CE-Gerät
Datenselektion via SQL-Statement
erzeugt und füllt lokale Tabellen
Underscheidung von Daten mit und ohne Tracking
Push
Geänderte Daten werden zum Server gesendet
Submit SQL
Ein SQL-DML-Statement weiterreichen
Geschwindigkeitsvergleich (1 von 2)
SQL Server for CE vs CEDB
Time in Seconds
7000
6261,32
6000
5000
4000
SSCE
CEDB
3000
2000
1000
0
24,244
Create 4 Indexes (smaller is faster)
Jornada 820 SA1100
Geschwindigkeitsvergleich (2 von 2)
SQL Server for CE vs CEDB
Time in Seconds
700
615,45
600
500
543,2
400
SSCE
300
CEDB
200
100
0
170,28
113,23
19,092
17,804
Load 15K
rows
27,61
26,888
Seek Update Seek Update Delete 15K
Index
rows
Jornada 820 - smaller is faster
Auslieferung und Preis (Stand 9/00)
Ausgeliefert mit SQL Server 2000 Developer Edition
ca. 1000 DM
Eine Developer-Lizenz inbegriffen
Unlimitierte Weitergabe
CALs für SQL Server-Verbindung nötig
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
Setup von Anwendungen
Quelle der Installation
aus dem WEB (via PPCIE)
von Compact Flash Card (via PPC Explorer)
oder Autorun (CAB-File enthält alle Infos)
von anderem CE-Device (via PPC Explorer und IR-Verbindung)
vom PC (via Application Manager)
CAB Wizard, VB-Wizard, Tools z.B. Firma Wise
CPU-Unabhängigkeit durch CEF (Common Executable Format)
CEF (Common Executable Format)
CEF-Code ist CPU-unabhängig
nur PPCs haben CEF-Translator
(beim Setup wird CEF auf dem Gerät in CPU-Code übersetzt)
Projekteinstellung (kommendes eMVC?):
Win32 (WCE CEF) Debug bzw. Release
INF-File erstellen mit CPU-Code gleich 0
CAB-Wizard benutzen
\Windows CE Tools\WCE300\MS Pocket PC\support\ActiveSync\
windows ce application installation\cabwiz\Cabwiz.exe
Doku: eMVC Onlinehilfe
"Installation and Configuration Guide"
CEF: teilweise als „Compiled Executable Format“ dokumentiert
eMVC: trotz Doku keine CEF-Projekteinstellung möglich
Welche CPU hat das Gerät?
GetSystemInfo() holt SYSTEM_INFO-Struct mit dwProcessorType
aus WINNT.H
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
PROCESSOR_INTEL_386
386
PROCESSOR_INTEL_486
486
PROCESSOR_INTEL_PENTIUM 586
PROCESSOR_INTEL_PENTIUMII 686
PROCESSOR_MIPS_R4000
4000
PROCESSOR_ALPHA_21064
21064
PROCESSOR_PPC_403
403
PROCESSOR_PPC_601
601
PROCESSOR_PPC_603
603
PROCESSOR_PPC_604
604
PROCESSOR_PPC_620
620
PROCESSOR_HITACHI_SH3
10003
PROCESSOR_HITACHI_SH3E 10004
PROCESSOR_HITACHI_SH4
10005
PROCESSOR_MOTOROLA_821 821
PROCESSOR_SHx_SH3
103
PROCESSOR_SHx_SH4
104
PROCESSOR_STRONGARM
2577
PROCESSOR_ARM720
1824
PROCESSOR_ARM820
2080
PROCESSOR_ARM920
2336
PROCESSOR_ARM_7TDMI
70001
// incl R4101 & R3910 for Windows CE
//
//
//
//
//
//
//
//
//
//
//
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
Windows
CE
CE
CE
CE
CE
CE
CE
CE
CE
CE
CE
-
0xA11
0x720
0x820
0x920
Programmierung
eMbedded Visual Tools 3.0: eMVC, cMVB
Variationen mit „Hello World“
Programmierunterstützende Tools
WinCE APIs
Unicode
UI-Programmierung
Spezielle Bibliotheken und APIs
Auslieferung von Anwendungen (Setup)
IE-basierende Anwendungen
IE-Anwendungen für PPC
Browser: Pocket IE 5
PocketPC Internet-Verbindung via
- Compact Flash Modem
- Compact Flash Ethernet-Karte
- IR-Verbindung mit Telefon
- Digital Phone Card
- Offline via Daten-Cache
Zusätzliche Darstellungsmöglichkeiten
- Fit-to-Screen mit virtuellem 640*480-Modus
Technologien
- HTML
- XML
- SSL (Secured Sockets Layer): 64bit-Zertifikate
- WinINet
Infos im Web
Darstellung: vituelles VGA
Echte PPC-Auflösung
View / Fit to Screen
(virtuelle VGA-Auflösung)
IE-Anwendungen für PPC
Beispiel:
http://www.amazon.com/pocketpc/
Grobe Richtlinie:
weniger ist mehr!
-> Bilder, Sound, Seitengröße
-> bis 2 Frames ist schön...
View / Adress Bar
Falls eigene Startseite auf PPC:
z.B. file://\My Documents/...xyz.htm
Testmöglichkeit: mit Emulator
Server erkennt PocketPC
hier: serverseitiges VBScript
'Check for Windows CE
if (InStr(Request.ServerVariables("HTTP_USER_AGENT"), "Windows CE")) then
{ add Windows CE specific code }
else
{ add code for other platforms }
end if
'Check for Pocket PC
if (InStr(Request.ServerVariables("HTTP_UA_OS"), "POCKET PC")) then
{ add Pocket PC specific code }
else
{ add code for other platforms }
end if
Client-Script erkennt PocketPC
zu benutzen: JScript
var strNav = navigator.userAgent;
var isCE = strNav.indexOf("Windows CE");
if(isCE > -1) {
{ add Windows CE specific code }
}
else {
{ add code for other platforms }
}
var isPPC = strNav.indexOf("240x320");
if(isPPC > -1) {
{ add Pocket PC specific code }
}
else {
{ add code for other platforms }
}
HTML-Unterstützung (PocketPC)
HTML 3.2
Referenz: http://www.microsoft.com/mobile/developer/html.doc
Framesets (gemäß HTML 4.0)
Bilder und Sound
- auch als Hintergrund möglich
- keine Animated GIFs
Skripting: JScript 1.1
- ActiveX-Objekte nutzbar (kein Auto-Download)
- keine dynamischen Framesets
- kein Window.Open
DHTML: nicht unterstützt (PPC ist kein Fat Client)!
XML-Unterstützung (PocketPC)
DOM
Data Islands
Schemata
XSL Stylesheets
XMLHTTP
PPC-Client: XML-Request senden
<SCRIPT LANGUAGE=“JSCRIPT”>
var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");
xmlhttp.Open("POST", "XMLlog.asp", false);
var strXML = "<changeprice " +
"SKU='" + document.forms[0].SKU.value +
"'Price='" + iNewPrice + "'/>";
// Send request to logging page
xmlhttp.Send(strXML);
// Show response (success or failure)
alert(xmlhttp.responsetext);
</SCRIPT>
XML: Server-Response
ASP-Seite vom Server
<%@ LANGUAGE="VBSCRIPT" %>
<% Response.ContentType = "text/xml"
set XMLReq = Server.CreateObject("Microsoft.XMLDOM")
XMLReq.load(Request)
set xmlAction = XMLReq.selectSingleNode("//changeprice")
iSKU = xmlAction.GetAttribute("SKU")
iPrice = xmlAction.GetAttribute("Price")
{ ...open a recordset containing the requested SKU }
if not rsData.eof then
rsData("Price") = iPrice
rsData.update
response.write "Price changed successfully to $" & iPrice & "."
else
response.write "No record found for this SKU."
end if %>
Agenda
Entwickeln von Anwendungen für Windows CE
• Einleitung:
•Der Trend „Mobilität“
•Windows CE Historie
•Gerätevielfalt und Abgrenzung
•Platform Builder
• PPC Endanwender-Tools
• Programmierung
•eMbedded Visual Tools 3.0
•APIs
• Zusammenfassung und Literatur
Zusammenfassung
WinCE ist modular für versch. Gerätetypen gebaut
Mobilität wird immer wichtiger. Mobilfunksysteme steigern die
Attraktivität
eMbedded Visual Tools ermöglichen Einstieg auch ohne WinCEGerät mit gewohnter Umgebung
Anwendungs-Programmierung mit Win32-Subset und speziellen
APIs
Links und Literatur
http://www.microsoft.com/mobile/
http://www.microsoft.com/mobile/developer
http://www.microsoft.com/windowsce/
MSDN Library (hier: Titel vom Juli2000)
eMbedded Visual Tools 3.0 Onlinehilfe
zu eIE-basierenden Lösungen:
http://www.microsoft.com/mobile/developer/webdeveloper.asp
Richtlinien für Pocket IE-Apps:
http://www.pocketpc.com
http://avantgo.com/builder
www.AvantGo.com
Webseiten-Zugriffe und PC-Sync-Möglichkeiten,...
Diskussion
und
Erfahrungsaustausch