Creando para Windows Mobile
A la hora de desarrollar de aplicaciones para Windows Mobile disponemos de una abanico de tecnologías y herramientas bastante extenso, pudiendo crear aplicaciones de gestión, aplicaciones de conectividad, videojuegos, etc. La forma más sencilla de construir una aplicación sobre Windows Mobile es .NET Compact Framework que nos permite construir aplicaciones basadas en Windows Forms que pueden hacer uso de recursos como Bases de Datos SQL Server y SQL Server Mobile, Servicios Web a través de WCF, etc. Aunque el foco principal de .NET Compact Framework es inicialmente aplicaciones de gestión, gracias a las posibilidades de extensibilidad podemos crear aplicaciones con otros propositos aprovechando las capacidades del sistema operativo:
- Aplicaciones GPS, en donde podemos presentar visualización de Mapas, localización de coordenadas, etc, gracias al soporte nativo del S.O. a las capacidades GPS.
- Aplicaciones Gráficas como videojuegos gracias a la interoperabilidad con Direct X.
- Aplicaciones de conectividad gracias a las posibilidades de telefonia basadas en TAPI.
- etc.
Windows Mobile dispone de multiples funcionalidades a través del API Win32 que da soporte a los distintos sistemas incluidos. Esta funcionalidad puede ser utilizada desde .NET mediante las capacidades de interoperabilidad y de pIvoke, aunque requiere algo de esfuerzo adicional. Por supuesto, estas capacidades pueden ser utilizadas desde cualquier compilador C y C++ para Windows Mobile, pero para poder aprovechar la simplificación que aporta .NET CF, vamos a centrarnos en que tenemos que tener en cuenta:
- La memoria de Windows Mobile es limitada para cada proceso (32 MB en la mayoría de los casos y 128 MB en algunas ocasiones), por lo que es necesario hacer uso de este recurso eficientemente (Reservando lo más tarde posible y liberando lo más pronto que podamos).
- Al igual que podemos incluir llamadas a Win32, podemos hacer uso de ActiveX o componentes COM. En este caso, el uso del API de System.Runtime.Interop es la base para trabajar correctamente con este tipo de componentes. A la hora de acceder a componentes COM/ActiveX podemos seguir varias alternativas, disponer de una PIA (Primary Interop Assembly) en donde están las definiciones de los objetos COM (no su implementación), definir nosotros mismos las interfaces y tipos en C# o solicitarle a VS mediante una referencia (a una librería COM o a una libería TLB) que nos genere nuestra libería de interop.
- Es importante en cualquier caso, liberar correctamente todas las referencias y punteros que hayamos solicitado haciendo uso del helper Marshal en donde disponemos de funciones para reservar memoria, liberarla, incluyendo la liberación de componentes COM.
En siguientes post, entraré más en detalle en los distintos aspectos que he comentado centrandome especialemente en ejemplos concretos que creo pueden resultar útiles.