Windows Mobile, Développement et Sécurité
Développer pour Windows Mobile
Héritage du monde Windows
Windows Mobile Smartphone Edition reprend tous les traits typiques de la programmation dans un environnement Windows. Les principes de gestion de la mémoire vive, des processus, du système de fichiers sont identiques. Les librairies dynamiques ou dll sont toujours aussi primordiales. Il en est de même pour le développement, les languages de programmation sont identiques. Les outils de développements tendent à devenir standards pour toutes les plate-formes :- Windows for PC
- Windows CE
- Windows Mobile
- Pocket PC
- Smartphone
- Pocket PC
Développer en C++
Présentation
Pour ce qui concerne les outils, jusqu'à Smartphone 2003, les développeurs disposaient d'un outil gratuit, mais pas libre, pour développer, débugguer et déployer des applications natives signées en langage C++ : Microsoft Visual Embedded C++ 4.0 . Depuis Windows Mobile 5.0, il est cependant nécessaire de posséder le logiciel Visual Studio .NET 2005 : plusieurs licences sont disponibles a des tarifs plus ou moins élevés. A ce jour, le 20 Février 2006, je ne sais pas si les outils du SDK pour compiler une application (compilation + édition de liens) sont libres d'accès.
Les bibliothèques dynamiques ou DLL dans le monde Windows
Source : http://fr.wikipedia.org/wiki/Dll
Introduction
En informatique, une bibliothèque logicielle est un ensemble de routines regroupées pour réaliser un groupe de tâches du même domaine. Les bibliothèques logicielles se distinguent des exécutables dans la mesure où elles sont utilisées par des programmes plutôt que d'être exécutées directement elles-même; elles fournissent un code « assistant » un programme indépendant en lui fournissant des services (par exemple le calcul d'un cosinus, ou l'inversion d'une matrice).
Les bibliothèques sont parfois appelées librairies ; il s'agit d'un abus de langage résultant d'une mauvaise traduction du faux ami en anglais library.
Principe
Le chargement des bibliothèques peut survenir de deux manières :
- une bibliothèque chargée dynamiquement voit son code exécutable chargé à la volée lors d'un appel par le programme qui en exploite une fonction. Ce chargement peut même, dans certains cas, être réduit aux seules parties de code correspondant aux fonctions appelées.
- une bibliothèque chargée statiquement voit tout son code chargé en même temps que le code de l'application utilisatrice.
Une bibliothèque est en principe partagée par le système d'exploitation afin de ne pas dupliquer son code dans toutes les applications y faisant appel. Voir cependant la possibilité de versions simultanées.
Les bibliothèques dynamiques
Une bibliothèque dynamique, appelée Dynamic Link Library (.dll) sous Windows et généralement appelée shared object (.so) sous UNIX, est un fichier de bibliothèque logicielle utilisé par un programme exécutable, mais n'en faisant pas partie.
Ce fichier contient des fonctions qui pourront être appelées pendant l'exécution d'un programme, sans que celles-ci soient incluses dans son exécutable.
Le principal avantage des bibliothèques dynamiques est la réduction de la taille d'un exécutable, puisque certaines parties du logiciel se situent dans le système. De plus, cela permet d'introduire des validations identiques pour chaque programme, puisque tous les programmes font lien vers une seule et même bibliothèque, ce qui évite au programmeur de réinventer la roue à chaque fois.
Ceci permet de partager des fonctionnalités (Unicode, IHM, chiffrage par exemple) entre différentes applications sans gaspiller ni espace disque ni espace mémoire.
.NET Compact Framework et Développement en C#
Le .NET Compact Framework
Source : http://morpheus.developpez.com/cfdotnet/#L1
Présentation
Le Compact Framework .NET fait partie intégrante du Framework .NET destiné aux monde PC. Certaines certaines classes lui son exclusivement destiné même si dans l'ensemble, il s'agit d'une version allégée du Framwork .NET. On remarquera en effet que de nombreuses fonctionnalités ne sont pas supportées.
Il s'agit d'un environnement système execurant du code précompilé par le biais d'une machine virtuelle tout comme Java. Il permet d'exécuter des programmes sur divers périphériques informatiques à ressources limitées : assistants numériques personnels (PDA, Personal Digital Assistant) tels que les Pocket PC, téléphones mobiles, décodeurs, périphériques informatiques automobiles et périphériques personnalisés intégrés au système d'exploitation Windows CE .NET.
Pour simplifier, on peut dire que le Compact Framework .NET apporte aux terminaux mobiles la souplesse d'un langage objet aisé à écrire allié à la puissance du Framework .NET.
Le Compact Framework .NET offre également les avantages suivants:
- Exécution de programmes indépendants du matériel et des systèmes d'exploitation
- Prise en charge de protocoles réseaux courants et connexion transparente avec les services Web XML
- Performances optimales dans la génération de code natif à l'aide de la compilation juste-à-temps
Ressemblances et différences avec le .NET Framework
Source : http://morpheus.developpez.com/cfdotnet/#LaIl existe beaucoup de différences entre le Compact Framework .NET et le Framework .NET. En voici une liste non exhaustive:
Tableaux: Au contraire de certains langages, le Common Language Runtime ne prend pas en charge les limites inférieures autres que zéro et lève une exception
MissingMethodException si le premier élément d'un tableau n'est pas zéro.
ASP.NET: Le Compact Framework .NET est essentiellement une plate-forme de client élaboré et ne prend pas en charge ASP.NET.
Assemblys et GAC (Global Assembly Cache) : Dans sa version actuelle, le .NET Compact Framework ne prend pas en charge les assemblys composés de plusieurs modules, mais prend en charge les assemblys satellites.
Classes: Le .NET Compact Framework prend en charge un sous-ensemble de la Bibliothèque de classes .NET Framework.
COM interop et fonctions de rappel: Le Compact Framework .NET n'assure pas l'interopérabilité avec les objets COM, mais vous pouvez utiliser PInvoke (platform invoke) pour accéder à des fonctions DLL natives qui, à leur tour, peuvent appeler des objets COM.
Répertoire en cours: La fonctionnalité de répertoire en cours est absente sur les périphériques qui exécutent Windows CE .NET ; par conséquent, le .NET Compact Framework ne prend pas en charge les méthodes Directory.GetCurrentDirectory et Directory.SetCurrentDirectory.
Données: Le Compact Framework .NET fournit une implémentation de sous-ensemble de ADO.NET et inclut le fournisseur de données SQL Server CE .NET. L'espace de noms
System.Data.OleDb n'est pas pris en charge.
Types de données et précision en virgule flottante: Seule Math.Round(double a) est prise en charge ; Math.Round(double a, double b) n'est pas prise en charge.
Délégués: Les délégués asynchrones, en particulier les méthodes BeginInvoke et EndInvoke, ne sont pas pris en charge.
Événements: Le .NET Compact Framework prend en charge les événements GotFocus et LostFocus, mais non les événements Activated et Deactivated.
Installation et fichiers CAB: Vous pouvez utiliser des fichiers CAB et créer des applications MSI pour distribuer vos applications.
Test des performances: Le .NET Compact Framework ne prend en charge ni le profilage de code, ni le fichier Perfmon.exe du Moniteur système.
Réflexion: Le .NET Framework ne prend pas en charge l'espace de noms
System.Reflection.Emit.
Sérialisation: Pour des raisons de taille et de performances, le .NET Compact Framework ne prend en charge ni la sérialisation binaire à l'aide de
BinaryFormatter, ni la sérialisation SOAP à l'aide de
SoapFormatter.
Minuteries: Les méthodes Timer.Start et Timer.Stop ne sont pas prises en charge, mais vous pouvez démarrer et arrêter une minuterie en affectant à la propriété Timer.Enabled la valeur true or false.
Développer en C#
Pour développer en C#, l'outils de référence est celui vendu par Microsoft : Visual Studio .NET . A l'heure actuelle, la version « 2003 » est compatible avec le développement pour Smartphone 2003. Mais pour développer pour Windows Mobile 5.0 for Smartphone il faut disposer de la version « 2005 ». Il n'est pas nécessaire de rappeller que les produits Microsoft sont bridés par leurs licences.
C'est pourquoi il est possible de développer avec des outils « Open Source » voir tout simplement gratuits. Il existe un plug-in pour Eclipse cependant ses fonctionnalités sont limitées. SharpDevelop est un outils Open Source qui permet de développer en C# pour Microsoft .NET . Pour développer spécifiquement pour une plateforme telle que Smartphone 2003, il est obligatoire de modifier les options de compilation. Il faut en effet spécifier au compilateurs les bibliothèques dynamiques (.dll) natives du système d'exploitation mobile.
Exemple de code source communicant
using System; using System.IO; using System.Net; using System.Text; ////// Fetches a Web Page /// class WebFetch { static void Main(string[] args) { // used to build entire input StringBuilder sb = new StringBuilder(); // used on each read operation byte[] buf = new byte[8192]; // prepare the web page we will be asking for HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.google.com"); // execute the request HttpWebResponse response = (HttpWebResponse) request.GetResponse(); // we will read data via the response stream Stream resStream = response.GetResponseStream(); string tempString = null; int count = 0; do { // fill the buffer with data count = resStream.Read(buf, 0, buf.Length); // make sure we read some data if (count != 0) { // translate from bytes to ASCII text tempString = Encoding.ASCII.GetString(buf, 0, count); // continue building the string sb.Append(tempString); } } while (count > 0); // any more data to read? // print out page source Console.WriteLine(sb.ToString()); } }
Ce code permet de lire au format ASCII le contenu de la page de démarrage de Google. On en tire plusieurs constatations.
On remarque instantanément une ressemblance frappante avec le langage Java. En effet, les classes s'avèrent structurées de la même manière, les éléments du langage sont quasiment identiques. Les packages Java sont appelés namespace, les import, using. Au niveau de l'API, le .NET Compact Framework offre évidemment moins de services que l'API standard Java. Cependant, s'il on s'en tient aux types natifs, il est désormais possible d'avoir des listes typées avec les generics par exemple inclus dans le .NET Compact Framework 2.0. D'autre part, il est possible de charger des bibliothèques dynamiques (dll) natives. Les API de bas niveau sont donc accessibles.