desarrolloMobile.NET Noticias
miércoles, noviembre 08, 2006
Nueva librería bluetooth para Windows XP
La verdad es que la migración a XP no ha sido muy dura y como era de esperar, gracias a la gran cantidad de API's de Microsoft Bluetooth Stack, el desarrollo y el debug, evidentemente, ha sido más facil.
Estoy acabando un proyecto de Windows Forms que muestre las capacidades de la librería. En cuanto lo tenga pondré un pantallazo y lo 'colgaré'. También voy a tratar de pasarla a .NET 2.0 y para el año que viene poder colgar una librería GPS en .NET que estoy acabando.
De la misma forma he 'colgado' también la versión 0.93 para la plataforma Windows Mobile, para solucionar un par de bugs, y parece ser cada vez más estable. Entre los objetivos de está librería están la conexión con dispositivos manos libres y transferencia de ficheros, aún en desarrollo.
Si estais interesados en cualquier cosa o tenéis alguna sugerencia/crítica ya sabéis, ¡¡un saludo!!
martes, octubre 17, 2006
Conexión entre Visual Studio y dispositivos Windows CE sin ActiveSync
Observaciones
- Lo he probado utilizando Visual Studio 2005.
- El paso de copia de archivos la realicé con ActiveSync ( ¿¿ que estupidez no ?? ). En el enlace se habla de "copiar los archivos utilizando cualquier conexión establecida con el dispositivo", con Windows XP SP2, un dispositivo conectado sin ActiveSync es interpretado como un dispositivo USB y pedirá permiso para buscar el software asociado en la mayoría de los casos no sabrá instalarlo. Otra alaternativa es mediante Bluetooth, Irda, o copiando los archivos a una tarjeta de almacenamiento SD, MiniSD, MMC, etc.
- Seguid lo pasos uno a uno y tened paciencia puesto que la ejecución de cMaccept.exe puede ser lenta. Al final, sin embargo, ¡¡siempre acaba conectando!!
Nuevo Airis T470
Airis entra en el mundo del smartphone con el modelo T470 basado en Windows Mobile 5.0. Sus características són:
- Windows® Mobile® 5.0 for Smartphone
- GSM/GPRS Tri-banda 900/1800/1900
- Pantalla 1,9" TFT, 65.000 colores
- 128 MB Flash ROM + 64 MB SDRAM
- Slot para memoria T-flash(microSD)
- Bluetooth v1.2 e infrarojos
jueves, septiembre 14, 2006
Peculiaridades del uso de menús en Smartphone
La utilización de menús en dispositivos Smartphone, donde la pantalla no es táctil y los controles de entrada (right and left keys) resultan como los principales ( y a veces únicos ) interfaces de entrada (junto a back key), resulta algo 'engorroso'. Para evitarlo, conozcamos las restricciones del uso de menús para Smartphone.
La primera restricción (bastante obvia) es que sólo pueden haber 2 menús principales, los que corresponden a las teclas de control izquierda (left softkey) y derecha (right softkey). Ésta última, la softfkey derecha, es la única que puede contener submenús, la de la izquierda no. Sin embargo Visual Studio en tiempo de diseño no alertará sobre el incumplimiento de alguna de las restricciones; en tiempo de ejecución, en el método InitializeComponent, emitirá una excepción del tipo NotSupportedException. La eliminación de las teclas de control izquierda o derecha en tiempo de ejecución no están permitidas aunque sí los submenús.
Ampliar más información.
viernes, septiembre 01, 2006
Tecnología Direct Push en Messaging and Security Features Pack
Para los que queráis, existen actualizaciones para algunos dispositivos. Si además queréis trabajar con el emulador, las imágenes de Windows Mobile 5.0 con MSFP ya están disponibles.
¡A disfrutarlo!
PD: Para los que tengais PocketPC HP como yo, para las hx2100, hx2400, hx2700 podeis comprar las actualizaciones en iPAQ Choice.
jueves, agosto 31, 2006
martes, agosto 29, 2006
.NET Compact Framework 2.0 Service Pack 1 Patch
ActiveSync 4.2 ya disponible
jueves, julio 27, 2006
Mobile Client Software Factory – July 2006
miércoles, julio 19, 2006
Nueva CTP de Windows Vista
Además en www.seewindowsvista.com podran encontran videos de las futuras aplicaciones de WPF,WCF y WWF.
miércoles, junio 21, 2006
Mi Libreria
Acabo de publicar una nueva sección en desarrolloMobile.NET; se trata de una librería, inicialmente Bluetooth, para el desarrollo desde dispositivos móviles. Mi intención es ir añadiendo código para que pueda ser consultado en modo binario o en algunos casos a nivel de código con el propósito que sea de utilidad para aquellos que o bien estan empezando en el desarrollo de dispositivos móviles o bien desean saber más sobre un determinado tema. La primera piedra es una librería básica de acceso mediante Bluetooth (versión 0.90). Tengo varios frentes abiertos que me gustaría compartir y que trataré, en la medida de lo posible, ir enriqueciéndola.
jueves, mayo 25, 2006
Estableciendo alias para las referencias
Desde la aplicación EXE referencio la DLL, con lo que en lugar de cambiar nombres traté de instanciar la clase EXE desde globla::, pero sin embargo esto no tiene ningún sentido puesto que todas los namespaces proceden de global, con lo que el compilador me generaba un error.
La solución la encontré en los alias de los espacios de nombres. Cuando referencio la DLL, en las propiedades de referencia (reference properties) existe un propiedad, Alias, la cual implícitamente tiene valor global. Si asigno un alias determinado que distinga que se trata del espacio de nombres de la DLL el problema se soluciona. Lo único que hay que tener en cuenta es que al instanciar la clase del espacio de nombres indicado deberemos también indicar el alias.
//clase de la DLL
AliasDLL::ClasesGenericas.ClaseA a1 = new AliasDLL::ClasesGenericas.ClaseA();
//clase de la EXE
global::ClasesGenericas.ClaseA a2 = global::ClasesGenericas.ClaseA();
miércoles, mayo 10, 2006
Anuncio de la .NET COMPACT FRAMEWORK SP1 Beta1
miércoles, abril 19, 2006
Habilitar fuentes ClearType en Windows Mobile
int SPI_SETFONTSMOOTHING = 75;
int SPIF_UPDATEINIFILE = 1;
int SPIF_SENDWININICHANGE = 2;
[DllImport("coredll.dll")]
private extern static int SystemParametersInfo
(int uAction, int uParam, int lpvParam, int fuWinIni);
Dónde para establecer ClearType llamaremos a la función de esta manera:
SystemParametersInfo (SPI_SETFONTSMOOTHING,1,0,SPIF_SENDWININICHANGE SPIF_UPDATEINIFILE);
y para deshabilitarla cambiamos el 1 por un 0 en el parámetro uParam.
Pueden descargarse un programa de apenas 6 kb, para plataforma Windows Mobile Smartphone, MPX220 ClearType para MPX220, funcional para otros móviles, desarrollado con VS .NET 2003 aquí.
jueves, marzo 23, 2006
Error: No se puede establecer la conexión. Asegúrese de que el dispositivo esta fisicamente conectado al PC de desarrollo.
Pues bien encontré una solución sencilla. La encontré en un rincón de la web de Microsoft dedicado a FAQ's (cuyo enlace original había caducado) y por ello lo explico integramente aquí; por lo visto al deinstalar versiones anteriores de ActiveSync, elimina claves del registro necesarios para la implementación. La solución es sencilla y la tenemos en nuestro propio PC. En la carpeta [Archivos de programas]\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\WinCE Utilities\WinCE Proxy Ports Reg existe un fichero llamado ProxyPorts.reg el cual debemos ejecutar en nuestro PC. Seguidamente desconectamos el dispositivo de ActiveSync y lo volvemos a conectar y tratamos de implementar de nuevo. Si esto no fuera necesario hacemos un soft reset del dispositivo, aunque a mí no me ha hecho falta este último paso.
Pues nada, ¡espero que os sirva!
viernes, marzo 10, 2006
Nueva imagen de desarrolloMobile.NET
Despues de plantearme el pasarlo a ASP.NET 2.0, idea que descarté ya que no soy ningún experto en ASP e implicaba empezar el proyecto desde zero para aprovecharlo al máximo, decidí darle mayor agilidad para la insercción de recursos y darle un diseño nuevo en ASP.NET 1.1 además de otras mejoras, gracias a la ayuda y consejos de mi colega del departamento de T.I. de MRW, Juan Carlos, un experto en desarrollo web.
Ahora que desarrolloMobile.NET posee un nuevo 'look' y un mecanismo que me permitirá más facilidad a la hora de añadir recursos, espero que el tiempo me brinde la oportunidad de hacer crecer el site.
lunes, febrero 20, 2006
Name mangling, __declspec(dllexport), P/Invoke y DUMPBIN, (consideraciones varias)
El objetivo de este post es explicar consideraciones a muy bajo nivel de las librerias nativas desarrolladas con VC++ que quieran ser utilizadas desde código administrado mediante P/Invoke.
C++ fue el primer lenguaje que soporto las funciones sobrecargadas en entornos Windows. El problema de tener varias funciones llamadas igual, diferenciándose por el número y/o tipo de parámetros fue resuelto por el compilador asignando a cada función nombres 'especiales' para que el 'lincador' pudiera diferenciarlas. Esta técnica es conocida como 'name mangling'.
El problema se presenta cuando se quiere acceder desde un proceso externo a una de las funciones nativas. Pese a que el nombre de la misma es conocida por nosotros, el 'name mangling' ha intervenido y probablemente el nombre de la función internamente sea remotamente distinta de la original, aunque la libreria funcione correctamente.
VC++ soluciona este inconveniente mediante la macro __declspec(dllexport), que debe ser declarada en todas las funciones que sean susceptibles de ser llamadas desde un proceso externo. Asímismo deberemos indicar en un archivo .def el nombre de la librería y las funciones que seran exportadas precedidas por la palabra EXPORTS, ejemplo:
LIBRARY CPP_LibreriaEjempo
EXPORTS
Funcion1
Metodo2
Para asegurarnos que las funciones serán 'visibles' desde el exterior una vez compilada la libreria o bien queramos ver qué funciones lo són para una determinada librería que no hemos desarrollado nosotros, visual Studio .NET ofrece una herramienta muy interesante DUMPBIN. DUMPBIN está disponible desde la consola de comandos de Visual Studio .NET y deberemos pasarle el parámetro /EXPORTS para que no muestre la funciones 'exportables'. En la imagen un ejemplo de DUMPBIN de la libreria user32.dll.
martes, febrero 14, 2006
Congreso mundial 3 GSM en Barcelon
La impresionante puesta en escena de las más importantes compañías de telecomunicaciones a nivel mundial hicieron las delicias de los allí presentes; también durante estos días directivos de la categoría de Steve Ballmer (Microsoft), Ed Zander (Motorola), Olli-Pekka Kallasvuo (Nokia), Mr Wang Jianzhou (China Mobile) o Shane Robison (HP), realizarán charlas (Keynotes) sobre temas de actualidad y también de futuro.
Todas las novedades del congreso se publicarán en el resumen que dotNetManía está preparando así como la entrevista a David Fernández (Director de la División de Negocio de Movilidad y Dispositivos embebidos de Microsoft Ibérica), de la que tengo el placer de realizar; en definitiva trataremos de acercar, a los que no puedan asistir al evento, las novedades allí presentadas.
martes, febrero 07, 2006
Control de errores emitidos por las API de Windows en contextos P/Invoke
Durante una llamada a una API de Windows (sea Win32 o WinCE), mediante P/Invoke, suele ser muy probable que el código de error que devuelve la propia API no pueda ser recuperado, es decir que de alguna manera P/Invoke olvida ese valor. Además, llamadas del tipo GetLastError() pueden llevar a confusiones ya que desde que se genera el error en la primera llamada P/Invoke hasta la llamada de GetLastError(), el CLR puede haber llamado a otras APIs variando de esta manera el resultado de la esta última función.
Afortunadamente, el atributo SetLastError de DllImport asignado el valor true (el valor por defecto es false), permite ‘recordar’ a P/Invoke el resultado del error para el proceso en ejecución. La manera de obtener dicho resultado es utilizando el método GetLastWin32Error() de la clase Marshal (System.Runtime.InteropServices ), el cual devolverá el código de error emitido por la API de Windows. A partir de ahí lanzar una excepción con el código de error puede ser una opción.
Veamos un ejemplo en C# con la llamada a RasHangUp*
[DllImport(“coredll.dll”,SetLastError = true)] //si se utiliza en Win32 la llamada en a"rasapi32.dll"
public static extern uint RasHangUp(uint pRasConn);
if (RasHangUp (uiRas) != 0)
{
int error = Marshal.GetLastWin32Error();
string msg = String.Format(“Error {0}”,error);
thrown new ApplicationException(msg);
}
* Para que no quede duda RasHangUp cierra una conexión RAS. La implementación en Win32 se hace llamando a rasapi32.dll y es:
DWORD RasHangUp(
HRASCONN hrasconn
);
La implementacion en WinCE se hace llamando a coredll.dll y es:
DWORD RasHangUp(
HRASCONN Session
);
El parámetro de la declaración DllImport de RasHangUp puede pasarse también como IntPtr, int o uint, dependiendo del cáculo de referéncias.
lunes, febrero 06, 2006
¡Fin de semana Indigo!
El primer atasco fue que el sistema operativo sobre el que instalaba era en Español, y la CTP de sólo funciona sobre plataformas en Inglés. Así que una vez instalado el sistema operativo y añadido IIS sobre el mismo seguí la guía de instalación que encontré en http://www.windowscommunication.net/. A parte de las cerca de 2 horas que tardé en bajarme el SDK de poco más de 1Gb, no tuve más problemas y comencé a tocar código con una versión Express de C#. En WindowsCommunication.net hay dos Labs (Lab1,Lab2):
The Fundamentals of Programming the Windows Communication Foundation
Reliable and Transacted Messaging with the Windows Communication Foundation
Tengo que reconocer que no finalicé el primer Lab y ya estoy como en una nube, ¡es fantástico!
Trataré de finalizar los Labs, y expondré mis opiniones aquí, esperando poder escuchar las vuestras. Dos días, no más....
lunes, enero 30, 2006
Aspectos de la base de datos temporal de SQL Mobile
- en operaciones de UPDATE o DELETE de muchas filas o
- en operaciones de SORT sobre columnas no indexadas, puede crear una base de datos temporal excesivamente grande ya que sólo existe una sola base de datos temporal para todas las base de datos. La base de datos temporal también almacenará información en el caso que una de las base de datos se acerque, según el crecimiento de la misma, al límite anteriormente especificado.
lunes, enero 23, 2006
Upgrader de SQL Server CE(2000) a SQL Server Mobile (2005)
Para los que tenemos numerosas bases de datos en SQL Server CE 1.0 y 2.0, es interesante saber que Microsoft adjunta una herramienta de actualización llamada upgrade.exe; a continuación podeis encontrar todas las posibilidades de upgrade.exe. Ejemplo:
upgrade.exe /s "\dirOrigen\BDDorigen.sdf" /sp "pwdOrigen" /d "\dirDestino\BDDdestino.sdf" /dp “pwdDestino" /e /q
Parameter
Description
/s
The path to the source database file. (required)
/sp
The password for the source database file. (optional)
/d
The path to the destination database file. If you specify an existing file, the file will be overwritten. (required)
/dp
The password for the destination database file. (optional)
/e
If specified, the destination database will be encrypted. If you specify the /e parameter, you must also specify /sp and provide a password. (optional)
/q
Perform the upgrade silently without any UI. (optional)
/?
Displays this list of parameters. (optional)
jueves, enero 19, 2006
Device Emulator Manager
de VS .NET 2005
Visual Studio .NET 2005, ofrece una gran cantidad de emuladores con unas características mejoradas y nuevas. Los emuladores ofrecen soporte para ActiveSync, con lo que será posible conectarlos al escritorio y sincronizándolos como si de un dispositivo físico se tratara, la cual cosa facilita las aplicaciones RAPI.
Los nuevos emuladores pueden compartir carpetas. Hasta ahora el intercambio de ficheros se realizaba desde el ordenador escritorio compartiendo una carpeta y desde el emulador obteníamos los ficheros, ahora, la compartición de carpetas y ficheros es bidireccional. Con la introducción de Windows Mobile 5.0, la resolución de los dispositivos puede cambiar y por tanto los emuladores hacen lo mismo; podemos configurar tanto la resolución como la orientación de la pantalla.
Visual Studio .NET 2005 y Windows Mobile 5.0 SDK (for Pocket PC o for Smartphone) suministran (en total) 15 emuladores distintos, por lo que además se incorpora una nueva herramienta de administración de emuladores conocida como Device Emulator Manager (DEM). Además DEM es una pieza fundamental para la comunicación entre ActiveSync y los emuladores ya que en ella recae la responsabilidad de conexión y desconexión entre ambos.