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 :

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 :

  1. 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.
  2. 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:

Ressemblances et différences avec le .NET Framework
Source : http://morpheus.developpez.com/cfdotnet/#La

Il existe beaucoup de différences entre le Compact Framework .NET et le Framework .NET. En voici une liste non exhaustive:

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.