Archive for the ‘Compact Framework’ Category

TS: Microsoft Windows Mobile 5.0 – Application Development

September 5, 2006

 

Eigentlich wollte ich ja nach Indien noch eine kleine Zusammenfassung schreiben, aber wie immer ist die Zeit davon gelaufen und Keng hat ja schon eine tollen Post gemacht. Kaum wieder im Lande geht es mit .net gleich weiter ;) Ich habe mal wieder von Matthias eine Mail zu einer MCP Beta Prüfung erhalten. Nachdem ich bis jetzt alle meine MCPs als Beta gemacht habe, nutze ich diese Chance gleich wieder. (Auch wenn es diesesmal keinen Gutschein für eine MCP Prüfung gibt.)

Für alle die nicht wissen wie eine Beta abläuft, hier ein paar Fakten:

  • Man erhält mehr Fragen als die finale Prüfung, dafür werden einige davon nicht gewertet.
  • Zur Beantwortung hat man rund 4h Zeit.
  • Das Ergebnis erhält man erst kurz vor der Veröffentlichung der finalen Prüfung (~3 Monate)
  • Bis auf das Preparation Guide, MSDN und Google ist man auf sich alleine gestellt. (Auch wenn ich noch nie viel von Braindumps gehalten habe.)

Nun genau dieser letzter Punkt ist etwas mühsam, aber dafür bringt es einem auch sehr viel wenn man sich selbst durch den W3 Jungle kämpft. Aber vielleicht hat jemand dafür keine Lust und keine Zeit, also stelle ich mal die Linksammlung zur Verfügung nach der ich gelernt habe. (Ausgehend vom Preparation Guide.)

Prüfungsthemen:

Developing Mobile Applications by Using the Microsoft .NET Compact Framework 2.0

Naja, ich empfehle jedem die .netFX 2.0 Foundation Prüfung zu machen, aber auch hier gibt es ein paar interessante Sachen, die erwähnenswert sind (können sollte man sie alle *g*):

  • Manage data in a .NET Compact Framework 2.0 application by using .NET Compact Framework 2.0 system types. (Refer System namespace)
    • Exception classes
      • Auf jeden Fall lesenswert: MSDN vor allem für alle diejenigen wie ich, die gerne einfach eigene Fehlerklassen von Exception ableiten.
      • TypeForwardedToAttribute class
        • Für den kleinen Entwickler vielleicht nicht so interessant, aber in großen Umgebungen mit vielen Abhängigkeiten sehr hilfreich. Mehr hier.
  • Manage a group of associated data in a .NET Compact Framework 2.0 application by using collections. (Refer System.Collections namespace)
  • Improve type safety and application performance in a .NET Compact Framework 2.0 application by using generic collections. (Refer System.Collections.Generic namespace)
  • Manage data in a .NET Compact Framework 2.0 application by using specialized collections. (Refer System.Collections.Specialized namespace)
    • Hier ist die CollectionUtil Klasse erwähnenswert. Sie erlaubt die Erstellung von Case-Insensitive Hashtables und SortedLists.
    • Außerdem steckt hier BitVector32. Vergleichbar mit BitArray, aber effizienter, jedoch auf 32 bits beschränkt.
  • Implement .NET Compact Framework 2.0 interfaces to cause components to comply with standard contracts. (Refer System namespace)
    • IComparable: Eigene Implementierung zum Vergleichen von Objekten. Wird zur Sortierung verwendet in Listen und Kollektionen.
    • IDisposable: Im Umgang mit Unmanaged Ressourcen viel Wert, wenn man es richtig implementiert.
    • IConvertible: Wer wollte nicht schon immer sein User BO auf ein Boolean umcasten ;) Es gibt aber sicher ein paar Anwendungsfälle.
    • IEquatable: Das Gegenteil zu IComparable, definiert die Equals Methode.
    • IFormattable: Erlaubt die Formatierung eines Strings für ein Objekt zu verändern. Für viele Objekte zu aufwendig, aber schöne Szenarien denkbar.
  • Control interactions between .NET Compact Framework 2.0 application components by using events and delegates. (Refer System namespace)
    • das tägliche Brot des .net Entwicklers
  • Develop multithreaded .NET Compact Framework 2.0 applications. (Refer System.Threading namespace)
  • Implement reflection functionality in a .NET Compact Framework 2.0 application. (Refer System.Reflection namespace)
  • Enhance the text-handling capabilities of a .NET Compact Framework 2.0 application (Refer System.Text namespace), and search, modify, and control text within a .NET Compact Framework 2.0 application by using regular expressions. (Refer System.RegularExpressions namespace)

Designing and Developing a Windows Mobile User Interface

  • Interessant in Bezug auf UI:
    • PDF: Designed for WM Handbook for Smartphone
    • PDF: Designed for WM Handbook for PocketPC

Vieles ist auf dem großen Framework bekannt. Einige Eigenheiten:

  • Design user interfaces to conform to Designed for Windows Mobile guidelines.
  • Manage platform-specific display operations.
    • Create orientation-aware, resolution-aware, DPI-aware applications.
      • Sehr lästig manchmal, aber erspart einem auch teilweise für jedes Gerät eine eigene UI zu basteln. Leider keine guten Beispiele im Netz.
  • Update controls across thread boundaries.
    • Control.Invoke und seine Verwandten! Auf dem großen FX meistens mit guten Exceptions abgefangen, auf dem compactFX leider immer noch kryptische Meldungen.

Integrating Data in a Windows Mobile-Based Application by Using File System, ADO.NET, and XML

  • Streams und dergleichen wie im großen FX.
  • ADO.net 2.0 Datasets: Tolle Einführung hier (Notiz an mich selbst: Umbedingt vor der Prüfung nochmal durchlesen)
  • Work with XML data.
    • Hier die klassische Einführung auf GotDotNet.
  • Encrypt and decrypt data by using classes of the System.Security.Cryptography namespace.
    • Nicht so oft gebrauchtes Thema – daher schlage ich eher nach – aber wird immer wichtiger.
    • Erste Anlaufstelle: http://msdn2.microsoft.com/en-us/library/93bskf9z.aspx
    • Kurz gefaßt: CryptoStream mit entsprechenden Encryptor (benötigt Schlüssel) erstellen und dann wie normalen Stream behandeln.

Managing Data by Using Microsoft SQL Server 2005 Everywhere Edition

  • Neu für mich daher ausführlicher:
    • Erste Anlaufstelle die Books Online.
    • Grundsätzlich eine relationale Datenbank für CE/WM Devices, bestehend aus:
      • CE/WM Device
        • SQL Server Mobile Client Agent: zuständig für Connectivity, Replikation, RDA
        • SQL Server Mobile: die eigentliche Engine
      • Server
        • SQL Server Mobile Server Agent: zuständig für Replikation, benötigt IIS

Installation ist nicht Teil der Prüfung, aber komplex und mit einigen Stolpersteinen.

  • Create a SQL Server 2005 Everywhere Edition database.
    • SqlCeEngine Objekt: Connection String (Data Source = File der SDF Datei), dann CreateEngine Methode
    • SqlCeReplication: Replikation einrichten, SDF Datei als Connection String (liegt auf Server) angeben, dann AddSubscribtion aufrufen (AddOption=CreateDatabase)
    • Details in den Online Books
  • Manage connections to a SQL Server 2005 Everywhere Edition database.
    • SqlCeConnection, SqlCeCommand… Im Prinzip ADO.net nur jeweils mit SqlCe als Prefix der Objekte.
  • Manage data in a SQL Server 2005 Everywhere Edition database (info)
    • direct table access: schnellste Methode, umgeht Query Processor, CommandType.TableDirect
    • seek: unter Verwendung eines Index und TableDirect Mode, ermöglicht Seek ein schnelles Setzen des Readers anhand eines Parameters
    • set range: ähnlich wie seek ermöglicht es das Einschränken der Werte anhand eines Parameters die im Index gesucht werden
  • Perform transactions by using the SqlCeTransaction object.
    • ähnlich wie ADO.net 1.0 Transactions
  • Maintain and protect the contents of a SQL Server 2005 Everywhere Edition database.
    • Compact, Verfiy, Repair und Shrink jeweils über Methoden der Engine
    • AutoShrink und AutoFlush über ConnectionString einstellbar
    • Passwort-Schutz bzw. Verschlüsselung der Datenbank: hier, im wesentlichen über connString
  • Synchronize data by using Remote Data Access (RDA)
    • Es gibt Push und Pull.
    • Aus den Online Books:
      • Die App startet und kontrolliert den RDA, zuständig für Pull und Push von einem SQL Server.
      • Wenn die Tabelle getracked wird (SqlCe trackt Änderungen auf dem Device) muss die App aber immer noch regelmäßig die Änderungen pushen
      • Änderungen auf dem Server müssen durch Drop und Repull auf dem Device aktualisiert werden.
      • Die App kümmert sich um das Löschen der DB auf dem Mobile.
    • SubmitSql erlaubt Ausführung von SQL auf dem Server (über RDA)
  • Synchronize data by using merge replication.
    • nach erfolgreicher Installation und Konfiguration: SqlCeReplication.Synchronize
  • Links:

Developing Communication and Connection Capabilities in Windows Mobile-Based Applications

Hatte das Vergnügen mich die letzten Monate viel hiermit zu beschäftigen, daher überspring ich vieles. Das meiste funktioniert wie im großen Fx.

Implementing Interoperability and Platform-Specific Features in Windows Mobile-Based Applications

Der Fun Teil :)

  • Improve the mobile user experience by using notifications.
  • Implement interprocess communication.
  • Retrieve system state by using State and Notifications Broker.
    • Der einzige S(CH)NAPI den man lieben muss: Part 1
  • Access Microsoft Office Outlook Mobile features and data programmatically by using the OutlookSession object.
  • Expose COM components to managed code, and expose managed code components to COM components. (Refer System.Runtime.InteropServices namespace)
  • Call native Win32 DLL functions from managed code, and control the marshalling of data in a managed code application by using Platform Invoke technology. (Refer System.Runtime.InteropServices namespace)
    • Ähnlich wie im großen: MSDN

Optimizing, Packaging, and Deploying Windows Mobile-Based Applications

Achja nun wo ich fertig bin, sehe ich noch jemand hat eine Übersicht erstellt. Etwas ausführlicher, aber vieles aus den anderen Prüfungen bekannt *g* http://whartonj.blogspot.com/2006/09/71-540-study-material.html

Naja, morgen um 09:00 geht’s los. Werde mir wohl vorher noch ein paar Links anschauen, aber mal schauen wie es läuft ;)

Process Viewer für CE

August 1, 2006

Wir verwenden in einigen Teilen von CAPS Zugriffe auf Native DLLs (Bluetooth Widcomm…). Diese werden zwar von CF2.0 Klassen gewrappt, so dass wir kein PInvoke selber machen müssen, aber ich hab öfters beim Deployen das Problem, dass Visual Studio mir meldet:

Error 1 Deployment and/or registration failed with error: 0x8973190e. Error writing file '%csidl_program_files%\caps2.xxx\xxx.dll'. Error 0x80070020: The process cannot access the file because it is being used by another process.

Joah, ist ja schön und gut, aber die Library stammt nicht von mir und ich rufe (meines Wissens nach) korrekt alle Dispose (und notwendigen Stop) Methoden auf, aber trotzdem hängt der Prozess im Speicher. Ich tippe ja darauf, dass es was mit den Native Klassen zu tun hat. Das Problem tritt auch interessanterweise nur auf meinem Qtek 8310 nicht jedoch auf einem Qtek 9000 auf.

Egal, keine Zeit dem ganzen noch vor Indien (Abflug ist am Freitag!) auf den Grund zu gehen, aber ständig das Handy rebooten (hui das zu sagen, klingt komisch) ist auch keine Lösung. Irgendwo muss es doch einen Process Viewer für CE geben. Ich hatte zwar vor einer Woche schon mal danach gesucht, aber irgendwie nichts gefunden, oder mich nur nicht genug angestrengt. Heute bin ich aber per Zufall wegen eines anderen Problems auf diesen Blog gestoßen, der mich netterweise darauf aufmerksam gemacht hat, dass das Tool das ich gesucht habe in meinem Startmenü sich versteckt hält ;)

(c) http://blogs.msdn.com/testembedded/archive/2006/01/02/508584.aspx
Ich bin mal gespannt ob mir das beim nächsten fehlgeschlagenen Deployment hilft.