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