Está en la página 1de 761

Desarrollo de dispositivos inteligentes de Visual Studio 2005

Copyright© 2016 Microsoft Corporation

El contenido de este documento se ha retirado y ya no se actualiza o admite. Algunos vínculos podrían no funcionar. El contenido retirado
representa la versión más reciente actualizada de este contenido.
Desarrollo para Smart Device

Desarrollo de dispositivos inteligentes


Visual Studio 2005 proporciona compatibilidad enriquecida e integrada para desarrollar software que se ejecute en
dispositivos inteligentes basados en Windows CE, como Pocket PC y Smartphones. Es posible utilizar Visual C# o Visual Basic
para crear aplicaciones administradas que se ejecuten en .NET Compact Framework o bien es posible crear aplicaciones nativas
utilizado Visual C++. Independientemente del lenguaje que se elija, es posible utilizar el mismo editor de código, diseñadores e
interfaz de depurador que se utilizaría si se programara para PC. Simplemente seleccione una de las plantillas de proyecto de
Smart Devices que se encuentre disponible para el lenguaje que se seleccione y comience la codificación.
Visual Studio proporciona también emuladores que permiten ejecutar y depurar el código en el equipo de programación y
herramientas que simplifican el proceso de empaquetar la aplicación y sus recursos en archivos CAB para el desarrollo de
dispositivos para usuarios finales.
Para obtener la información más actualizada sobre proyectos de dispositivos inteligentes, visite el Centro para desarrolladores
de Mobile
En esta sección
Introducción a los proyectos para Smart Device
Proporciona información de resumen sobre problemas específicos del desarrollo de aplicaciones para dispositivos,
incluyendo las novedades de Visual Studio 2005, la relación entre Visual Studio para dispositivos y otros SDK y herramientas
de Windows Mobile, y cómo configurar su PC para el desarrollo de software para dispositivos.
Consideraciones de diseño para el desarrollo de aplicaciones para Smart Device
Proporciona información sobre cómo elegir un tipo de proyecto, seleccionar un lenguaje de desarrollo y personalizar
máscaras para emuladores.
Conectar Smart Devices a equipos de desarrollo
Describe métodos y opciones de conexión.
Programación para dispositivos con .NET Compact Framework
Explica procedimientos comunes para desarrollar software de dispositivos inteligentes con Visual C# , Visual Basic y .NET
Compact Framework.
Programar para dispositivos con Visual C++
Explica los procedimientos más comunes al utilizar Visual C++ para desarrollar aplicaciones de dispositivos nativos.
Depurar proyectos de dispositivos
Explica las diferencias con la depuración de escritorio y proporciona instrucciones para soluciones de depuración que se
componen tanto de código administrado como de código nativo.
Empaquetar soluciones de dispositivos para su implementación
Proporciona instrucciones para empaquetar las aplicaciones de dispositivos desarrolladas y transferirlas a uno o varios
dispositivos de destino.
Seguridad en los proyectos de dispositivos
Describe cómo firmar los archivos con certificados de seguridad y dispositivos de provisión.
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Ofrece proyectos completos que ilustran la sintaxis, la estructura y las técnicas empleadas para resolver dificultades de la
programación para dispositivos.
Referencia (dispositivos)
Incluye temas de referencia de ATL y MFC para dispositivos, la referencia de la interfaz de usuario para proyectos de
dispositivos, mensajes de error, etc.
Secciones relacionadas
.NET Compact Framework
Explica conceptos de la programación de aplicaciones de dispositivos. .NET Compact Framework traslada el poder de .NET
Framework a los dispositivos. Se compara .NET Compact Framework con .NET Framework, se describen los componentes
clave, se ilustran tareas de programación corrientes y se ofrece una relación de las clases compatibles.
Introducción a Visual Studio
Describe lo nuevo en Visual Studio.
Entorno de desarrollo integrado de Visual Studio
Ofrece información acerca del diseño, el desarrollo, la depuración, las pruebas y la administración de aplicaciones creadas
con Visual Studio .NET.
Desarrollo para Smart Device

Introducción a los proyectos para Smart Device


Visual Studio 2005 incluye las herramientas y marcos de trabajo necesarios con el fin de desarrollar aplicaciones para Pocket
PC, Smartphone y otras plataformas basadas en .NET de Windows CE. Si no cuenta con un dispositivo inteligente, es posible
crear y probar las aplicaciones para dispositivos inteligentes utilizando la tecnología de la emulación sin dejar el entorno de
desarrollo integrado (IDE) de Visual Studio.
Visual Studio 2005 admite los lenguajes de Visual Basic .NET, Visual C# y Visual C++ para el desarrollo de aplicaciones de
dispositivos inteligentes.
En esta sección
Lo nuevo en proyectos de Smart Device
Describe nuevas características para Visual Studio 2005 para proyectos de dispositivos inteligentes.
Información general sobre el desarrollo de aplicaciones (Dispositivos)
Describe soluciones basadas en Windows CE, aspectos relacionados con el diseño de dispositivos pequeños, traslado de
soluciones existentes, elección de un lenguaje de programación, comparaciones con el desarrollo de escritorio y aspectos
relacionados con la terminología.
Capacidades de dispositivos y herramientas de desarrollo necesarias
Describe varias versiones de dispositivos inteligentes y las herramientas necesarias para desarrollar cada una de ellas.
Requisitos de hardware y software de los proyectos para Smart Device
Muestra los requisitos para generar aplicaciones de dispositivos, estableciendo conexión con los dispositivos en cuestión y
ejecutando las aplicaciones en un dispositivo determinado durante la fase de desarrollo.
Herramientas remotas para proyectos de dispositivos
Describe las herramientas especiales disponibles para proyectos de dispositivos inteligentes.
Cómo: Optimizar la Ayuda para el desarrollo de Smart Device
Describe la mejor manera de utilizar la Ayuda para proyectos de dispositivos, incluido el uso de filtros.
Cómo: Iniciar el emulador de dispositivos en Visual Studio
Describe la apertura del emulador de dispositivos como suplente de un dispositivo físico.
Actualizar proyectos creados con herramientas antiguas
Describe cómo establecer el puerto de proyectos desarrollados con herramientas y versiones anteriores.
Cómo se desarrollan aplicaciones para Smart Device
Proporciona vínculos que puedan servir de ayuda en aspectos relacionados con dispositivos inteligentes habituales.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Mobile Developer Center
Programación de dispositivos inteligentes
Desarrollo para Smart Device

Lo nuevo en proyectos de Smart Device


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Visual Studio 2005 ofrece las siguientes funciones nuevas o ampliadas.
Novedades del SP1
Esta sección se ha actualizado para SP1 de Visual Studio 2005.
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Se ha mejorado el asistente para la actualización de proyectos de eMbedded Visual C++.
Lista de clases MFC de escritorio admitidas en los dispositivos
Se han agregado 15 clases de MFC a las bibliotecas de MFC de dispositivos. Las clases siguientes estaban en eMbedded
Visual C++, pero faltaban en Visual Studio 2005.
CBitmapButton Class
CDialogBar Class
CEditView Class
CFindReplaceDialog Class
CHttpConnection Class
CHttpFile Class
CInternetConnection Class
CInternetException Class
CInternetFile Class
CInternetSession Class
COleSafeArray Class
CReBar Class
CReBarCtrl Class
CRecentFileList Class
CSplitterWnd Class
Prepararse para SQL Server Compact Edition
Microsoft SQL Server 2005 Compact Edition reemplaza a SQL Server 2005 Mobile Edition. Verá este cambio en los cuadros
de diálogo del IDE de Visual Studio.
Información general sobre el acceso a datos (Proyectos de dispositivos administrados)
Cree bases de datos de SQL Server Compact Edition, modifique esquemas y realice otras tareas de administración de bases
de datos desde el IDE de Visual Studio. Utilice objetos comerciales, bases de datos de SQL Server, bases de datos de SQL
Server Compact Edition o servicios Web como orígenes de datos.
Windows CE 6.0 se publica el 1 de noviembre de 2006
Compatibilidad para el desarrollo de aplicaciones de Windows CE 6.0.
Novedades de Visual Studio 2005
Lo nuevo en el desarrollo de aplicaciones de dispositivos de Visual C++
Desarrollo de aplicaciones para dispositivos inteligentes mediante clases MFC (Microsoft Foundation Classes), la biblioteca
ATL (Active Template Library) y API nativas de Windows CE. Migración de los proyectos de eMbedded Visual C++ 4.0.
Lo nuevo en proyectos para dispositivos administrados
Las nuevas funciones de desarrollo administrado ofrecen, entre otros aspectos, anclaje y acoplamiento, compatibilidad
integrada con Smartphone y nuevos controles.
Cómo: Iniciar el emulador de dispositivos en Visual Studio
Se puede ejecutar, probar y depurar una imagen en tiempo de ejecución utilizando este emulador de dispositivos totalmente
nuevo, diseñado desde un principio para ejecutar código compilado para procesadores ARM.
Información general sobre el acceso a datos (Proyectos de dispositivos administrados)
Cree bases de datos de SQL Mobile, modifique esquemas y realice otras tareas de administración de bases de datos desde el
IDE de Visual Studio. Utilice objetos comerciales, bases de datos de SQL Server, bases de datos de SQL Mobile o servicios
Web como orígenes de datos.
Información general sobre el empaquetado de soluciones para dispositivos
Empaquete la aplicación para la implementación utilizando un proyecto CAB de Smart Device junto con el Editor del sistema
de archivos y el Editor del Registro.
Cambiar de plataforma en proyectos de dispositivo
Utilice un origen único para abordar más de una plataforma, como Pocket PC y Smartphone.
Herramientas remotas para proyectos de dispositivos
Realice de forma remota tareas de programación y depuración en un dispositivo basado en Windows CE.
Información general sobre seguridad (Dispositivos)
Firme los archivos con certificados apropiados y proporcione dispositivos.
Selección del método de conexión
Conecte el equipo de desarrollo a un dispositivo mediante puertos USB, Ethernet, 802.11b/g, Bluetooth, serie o por
infrarrojos.
Sitio Web Mobile Developer Center
Centro de acceso a información sobre proyectos para dispositivos inteligentes, con recursos para principiantes, ejemplos de
código, preguntas frecuentes, posibilidades de aprendizaje, etc.
Secciones relacionadas
Lo nuevo en Visual Studio 2005
Lo nuevo en .NET Compact Framework 2.0
Novedades (Libros en pantalla de SQL Server)
Desarrollo para Smart Device

Información general sobre el desarrollo de aplicaciones


(Dispositivos)
Visual Studio admite dos enfoques con el fin de desarrollar aplicaciones para dispositivos.
Es posible desarrollar aplicaciones Web móviles que se ejecuten en un servidor Web y que se representan en formatos
diferentes atendiendo a una amplia variedad de dispositivos móviles equipados en el explorador.
Es posible desarrollar aplicaciones cliente complejas basadas en Windows Mobile y Windows CE que se ejecutan en el
propio dispositivo. Este último enfoque es lo que se conoce como desarrollo de aplicaciones para Smart Devices.
Soluciones Smart Device y Windows CE
Para entender mejor la relación entre el software Windows CE, Pocket PC, Smartphone y Windows Mobile™, consulte el
artículo Mobile Developer Center Editor's Note de Microsoft Mobile Developer Center.
Compatibilidad entre versiones
Para identificar qué versiones de herramientas y tecnologías funcionan conjuntamente en el desarrollo de aplicaciones para
dispositivos, consulte Introduction to Development Tools for Windows Mobile-based Pocket PCs and Smartphones. En los
proyectos administrados de Visual Studio 2005, todas las plataformas tienen como destino la versión 2.0 de .NET Compact
Framework a menos que se indique de otra manera. Por ejemplo, en el cuadro de diálogo Nuevo proyecto, las plantillas de
dispositivos inteligentes aparecen marcadas con "(1.0)" si su versión de destino es la 1.0 de .NET Compact Framework.
Instrucciones de diseño
El diseño de una aplicación para dispositivo determina con qué facilidad, rapidez y eficiencia puede un usuario llevar a cabo
sus tareas. Al optimizar una aplicación para sacar partido de las capacidades de diferentes dispositivos, se ofrecerá al usuario
una experiencia óptima, al crear una aplicación más utilizable, coherente, receptiva y accesible. Para obtener instrucciones
detalladas sobre diseño relacionadas con características de interfaz específicas, vea el kit de desarrollo de software (SDK) de un
determinado dispositivo.
Emulador de dispositivos
El emulador de dispositivos está específicamente diseñado para proyectos de dispositivos de Visual Studio 2005. Ejecuta
aplicaciones compiladas para el conjunto de instrucciones ARM y se ejecuta como un proceso en modo usuario. Ahora Visual
Studio proporciona transporte de Acceso directo a memoria (DMA) para comunicarse con el emulador. Superando al
transporte tradicional TCP/IP, el transporte de DMA es más rápido, no basado en conectividad de red u otros factores externos,
a la vez que proporciona una conexión y desconexión determinística.
Visual Studio 2005 incluye imágenes del emulador para Pocket PC 2003 SE, Pocket PC 2003 SE Square, Pocket PC 2003 SE
Square VGA, Pocket PC 2003 VGA, Smartphone 2003 SE y Smartphone 2003 SE QVGA.
Haga clic en Ayuda en la barra de menú del emulador para ver la colección de temas de la Ayuda relacionados con el
emulador.
Para abrir el emulador, haga clic en Herramientas, en Conectar con dispositivo, seleccione el emulador que desee abrir y, a
continuación, haga clic en Conectar.
Nota
Los dispositivos emuladores admiten bibliotecas de Direct3D y DirectPlay, pero no admiten ningún tipo de aceleración de h
ardware. El rendimiento de las aplicaciones de Direct3D y DirectPlay que se ejecuten en el emulador no se corresponderá exa
ctamente con el rendimiento de las aplicaciones que se ejecuten en hardware real. Además, el hardware real puede o no pue
de admitir la aceleración de hardware. Es absolutamente recomendable que pruebe las aplicaciones de Direct3D y DirectPlay
en dispositivos reales.

Seguridad
El aspecto de conexión remota de aplicaciones de dispositivos agrega temas adicionales relacionados con la seguridad. Para
obtener más información, consulte Seguridad en los proyectos de dispositivos, Seguridad en .NET Compact Framework y
Seguridad del código nativo y del código de .NET Framework.
Establecer conexión entre puertos de soluciones existentes
Vea la siguiente información para obtener detalles sobre el establecimiento de conexión entre puertos y la migración:
Crear y desarrollar proyectos de dispositivos administrados
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Dispositivo y escritorio
Se utiliza el mismo entorno de Visual Studio que se utiliza para desarrollar aplicaciones de escritorio, pero surgen algunas
diferencias palpables al establecer como destino determinados dispositivos. Por ejemplo:
El entorno de Visual Studio proporciona herramientas adicionales para conectarse y realizar depuraciones en un
dispositivo.
Aparte de seleccionar un tipo de proyecto y una plantilla cuando se crea un proyecto, debe seleccionarse un dispositivo
en el que se ejecutará y depurará la aplicación. El dispositivo puede ser un dispositivo físico conectado al equipo de
desarrollo, un dispositivo conectado en red o un emulador de dispositivos que se ejecute en el equipo de desarrollo.
El número de clases y de miembros de éstas difieren de los disponibles cuando se desarrollan aplicaciones para
escritorio. En proyectos administrados que utilizan .NET Compact Framework, hay pocas clases que se encuentren
disponibles para dispositivos y el complemento de las clases normalmente difiere entre plataformas. Sucede lo mismo
con los proyectos nativos, en lo que sólo se encuentra disponible un subconjunto de API de Windows, clases MFC o
componentes ATL. Es posible determinar el tipo de clases disponibles con tan sólo ver la documentación, utilizar
IntelliSense o utilizar el Examinador de objetos de Visual Studio mientras que un determinado proyecto se encuentre
activo.
Como ocurre con las aplicaciones de escritorio, puede obtener acceso al código nativo mediante la invocación de la
plataforma. .NET Compact Framework ofrece una compatibilidad limitada con la interoperabilidad COM. No acepta la
creación de objetos COM en el código administrado ni la interoperabilidad con los controles ActiveX.
Algunos elementos del lenguaje pueden diferir, por ejemplo, no se aceptan todas las palabras clave de Visual Basic que
se utilizan en la programación para escritorio.
Algunos miniprogramas de código proporcionados en la documentación de Visual Studio para proyectos de escritorio
pueden generar errores de ejecución en proyectos de dispositivos.
Hay ciertas consideraciones del diseño, como el factor de la forma del dispositivo, el gasto de energía, limitaciones de la
memoria y otros detalles, que no plantean dificultades en el desarrollo para escritorio.

Recursos adicionales
Para obtener más información, visite el Mobile Developer Center.
Vea también
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Capacidades de dispositivos y herramientas de desarrollo


necesarias
Este tema se ha actualizado para Visual Studio 2005 SP1.
Visual Studio 2005 admite el desarrollo de aplicaciones para dispositivos que ejecuten Windows Mobile versión 5.0, Windows
Mobile 2003 y 2003 Second Edition, y hardware basado en Windows CE que ejecute Windows CE 5.0.
Sin embargo, existen muchos dispositivos antiguos. Esta situación podría confundirnos en lo que respecta a lo que se necesita
debido a determinadas herramientas de desarrollo, versión .NET Compact Framework y sistema operativo de Windows CE
subyacente.
Gráficos para la comparación de herramientas
Las siguientes tablas proporcionan una instantánea de las variaciones relacionadas con el hardware de dispositivos
inteligentes, las características de hardware y las herramientas de desarrollo. Estos listados pueden cambiar con el tiempo.
Puede obtener la información más actualizada y completa en el artículo técnico Introduction to Development Tools for
Windows Mobile-based Devices de MSDN Library.
Información general sobre las funciones IDE
Esta tabla proporciona información general sobre las funciones de los diferentes IDE. Las abreviaturas de encabezado de
columna son las siguientes:
eVT3C = eMbedded Visual C++ 3.0
eVT3V = eMbedded Visual Basic 3.0
eVC4 = eMbedded Visual C++ 4.0 y Service Pack 4.0
VS2003 = Visual Studio .NET 2003
VS2005 = Visual Studio 2005
eVT3C eVT3V eVC4 VS2003 VS2005
Tipo de código Código nativo X X X

Código interpretado X

Código administrado X X

Código del servidor X X

SDK de dispositivos Pocket PC 2000 y Pocket PC 2002 X X X

Smartphone 2002 X

Windows Mobile 2003 X X X

Windows Mobile 2003 (segunda edición) X X X

Windows Mobile 5.0 X


Compatibilidad de sistemas operativos y herramientas de .NET Compact Framework
Esta tabla proporciona información general sobre qué versiones de herramientas y qué versiones de software de Windows
Mobile admiten las versiones 1.0 y 2.0 de .NET Compact Framework.
Versión 1.0 Versión 2.0
Herramienta Visual Studio .NET 2003 X
Visual Studio 2005 X X

Versión de software de Window Windows Mobile 5.0 En ROM (1.0 SP3) Usuario que se puede instalar
s Mobile

Windows Mobile 2003 (segunda En ROM (1.0 SP2) Usuario que se puede instalar (sólo
edición) Pocket PC)

Windows Mobile 2003 En ROM (1.0 SP2) Usuario que se puede instalar (sólo
Pocket PC)

Smartphone 2002

Pocket PC 2002 Usuario que se puede i


nstalar

Pocket PC 2000 Usuario que se puede i


nstalar
Compatibilidad con tecnologías relacionadas con bases de datos
La tabla siguiente se ha actualizado para SP1 de Visual Studio 2005.
Esta tabla proporciona información general sobre qué tecnologías relacionadas con bases de datos son admitidas por varias
versiones de Windows Mobile.
SQL Server 2005 Compact Edition o S SQL CE 2.0 EDB CED ADOCE
QL Server 2005 Mobile Edition B
Windows Mobile 5.0 Usuario que se puede instalar Usuario que se puede inst En R En R Instalación de usuario
alar (sólo Pocket PC) OM OM* no admitida

Windows Mobile 2003 Usuario que se puede instalar (sólo Pocke Usuario que se puede inst N/A En R En ROM
(segunda edición) t PC) alar (sólo Pocket PC) OM

Windows Mobile 2003 Usuario que se puede instalar (sólo Pocke Usuario que se puede inst N/A En R En ROM
t PC) alar (sólo Pocket PC) OM

Smartphone 2002 N/A N/A N/A En R N/A


OM

Pocket PC 2002 N/A Usuario que se puede inst N/A En R En ROM


alar (sólo Pocket PC) OM

Pocket PC 2000 N/A Usuario que se puede inst N/A En R En ROM (la mayoría d
alar (sólo Pocket PC) OM e los dispositivos)

* En Windows Mobile 5.0, CEDB se encuentra en la memoria ROM pero está en desuso. En su lugar, los desarrolladores
deberían utilizar EDB.
Notas
Compruebe con el fabricante del dispositivo la actualización relacionada con un determinado dispositivo en una versión
posterior de Windows CE o Windows Mobile. Microsoft no proporciona actualizaciones para determinados dispositivos
destinados a usuarios finales.
Las ediciones de Visual Studio 2005 Express no incluyen compatibilidad con respecto a proyectos Smart Device.
Ya no se admiten las herramientas de eMbedded Visual Basic. El tiempo de ejecución de eMbedded Visual Basic ya no se
encuentra en la memoria ROM de dispositivos.
Es posible descargar eMbedded Visual C++ 4.0 y eMbedded Visual Basic 4.0 desde Mobile Developer Center.
La versión 1.0 de .NET Compact Framework, en caso de que todavía no se encuentre en la memoria ROM, se puede
instalar en la memoria ROM de dispositivos Pocket PC 2000, 2002, 2003 y SE 2003. En lo que concierne a la versión 2.0,
si todavía no se encuentra en la memoria ROM, se puede instalar en la memoria RAM o en un almacén persistente de
Pocket PC 2003, Windows CE 5.0 y Windows Mobile 5.0.
La versión actual de Compact Framework es la 2.0, disponible como instalación en memoria RAM en Mobile Developer
Center.

Vea también
Conceptos
Actualizar proyectos creados con herramientas antiguas
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Requisitos de hardware y software de los proyectos para Smart


Device
En los siguientes párrafos se especifica cuáles son los requisitos del equipo de desarrollo, el dispositivo de destino y la
conexión entre los dos.
Equipo de desarrollo
El hecho de seleccionar Programabilidad de Smart Device (se selecciona de manera predeterminada) al instalar Visual Studio
2005 agrega aproximadamente 900 MB de uso de espacio en disco duro. Si no está desarrollando aplicaciones de Smart
Device, es posible recuperar este espacio desinstalando Programabilidad de Smart Device. Para ello, en la ficha Agregar o
quitar programas del Panel de control, seleccione la instalación de Visual Studio, haga clic en Cambiar o quitar y siga los
pasos que se indican.
Cuando utilice un emulador en los proyectos de dispositivo, es necesario un mínimo de 64 MB de RAM adicional.
Dispositivo
El dispositivo de destino debe admitir la plataforma contra la que se está desarrollando. Visual Studio 2005 proporciona
compatibilidad para Pocket PC 2003, Smartphone 2003 y Windows CE 5.0 y plataformas posteriores.
Si no se ha instalado Framework en ROM, serán necesarios alrededor de 2 MB de RAM en el dispositivo para .NET Compact
Framework.
Conexión
Visual Studio 2005 requiere lo siguiente:
Hardware
A menos que su dispositivo físico tenga conectividad inalámbrica con el equipo de desarrollo habilitado, será necesario un
puerto serie o cable USB, proporcionado por el fabricante del dispositivo, para poder conectar un dispositivo al equipo de
desarrollo. Para poder usar esta conexión, debe configurar el equipo de desarrollo y el dispositivo conforme a las instrucciones
suministradas por el fabricante del dispositivo.
La utilización de un emulador como dispositivo no requiere de hardware adicional.
Software
Microsoft ActiveSync versión 4.0 o posterior.
Vea también
Conceptos
Aspectos básicos de instalación y configuración
Otros recursos
Introducción a los proyectos para Smart Device
Ediciones de Visual Studio
Desarrollo para Smart Device

Herramientas remotas para proyectos de dispositivos


Las herramientas remotas que aparecen se encuentran disponibles en Visual C++ 4.0 incrustado y se distribuyen con Visual
Studio 2005 con el fin de poder desarrollar y depurar las aplicaciones de dispositivos.
Para iniciar estas herramientas de forma autónoma, haga clic en Inicio en el escritorio de Windows, señale Todos los
programas, Microsoft Visual Studio 2005, haga clic en Herramientas remotas de Visual Studio y, a continuación,
seleccione una de las herramientas remotas en el menú.
En Utilizar
Ver y administrar el sistema de archivos en un dispositivo de destino (incluso exportar e importar) Visor de archivo rem
oto

Mostrar información sobre identificadores del montón e indicadores sobre cada proceso que se ejecuta Walker de montón re
en un dispositivo de destino moto

Mostrar información sobre cada proceso que se ejecuta en un dispositivo de destino Visor de proceso re
moto

Mostrar y administra el Registro para un dispositivo de destino Editor del Registro re


moto

Mostrar mensajes recibidos por ventanas asociadas a aplicaciones que se ejecutan en un dispositivo de Spy remoto
destino

Capturar una imagen de la pantalla en formato de archivo de mapa de bits (.bmp) de un dispositivo de d Zoom para acercar r
estino emoto

Vea también
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Cómo: Optimizar la Ayuda para el desarrollo de Smart Device


Si selecciona Mínima o Personalizada al instalar MSDN Library para Visual Studio, es posible que no tenga todos los
archivos de Ayuda de Visual Studio 2005 disponibles para los desarrolladores de dispositivos inteligentes. Concretamente, la
instalación Mínima no incluye la sección Desarrollo móvil e incrustado de la biblioteca.
Esta sección incluye material como, por ejemplo, documentación del SDK de Pocket PC y Smartphone, información sobre
Windows CE, etc. Con frecuencia, se hace referencia a los temas de dicha sección en los temas de la sección Desarrollo de
Smart Device de Visual Studio, que se instala siempre y se centra en el uso del entorno de Visual Studio para el desarrollo de
aplicaciones para dispositivos inteligentes. En los procedimientos siguientes se muestra la forma de determinar el tipo de
Ayuda que se ha instalado, cómo se agrega la Ayuda de Desarrollo móvil e incrustado, y cómo se filtra la Ayuda.
Para comprobar si se ha instalado la sección de Ayuda de Desarrollo móvil e incrustado
Haga clic en Guía del desarrollador de Pocket PC.
Si se muestra el tema, se ha instalado la sección Desarrollo móvil e incrustado.
Si no se encuentra el tema, puede agregar la sección Desarrollo móvil e incrustado siguiendo los pasos que figuran a
continuación.
Para incluir los temas de Desarrollo móvil e incrustado
1. En el Panel de control de Windows, haga clic en Agregar o quitar programas.
2. Seleccione MSDN Library para Visual Studio 2005 y, a continuación, haga clic en Cambiar.
3. En la página Pantalla de bienvenida del Asistente para proyectos de instalación, haga clic en Siguiente.
4. En la página Mantenimiento del programa, haga clic en Modificar.
5. En la página Instalación personalizada, seleccione Desarrollo móvil e incrustado.
6. En el menú contextual del botón de lista desplegable, seleccione Esta característica y todas las subcaracterísticas se
instalarán en el disco duro local.
7. Haga clic en Siguiente.
8. En la página Preparado para modificar el programa, haga clic en Instalar.

Filtrar los temas de Ayuda


Visual Studio proporciona un filtro de Desarrollo de Smart Device para la tabla de contenido y el índice. Cuando se aplica este
filtro, los temas visibles se reducen para incluir únicamente la documentación que se considera básica para los desarrolladores
de dispositivos inteligentes. El hecho más importante es que la aplicación de este filtro constituye un medio excelente para
mostrar sólo los subconjuntos de temas de referencia en tiempo de ejecución para dispositivos inteligentes, incluidas las
bibliotecas de .NET Compact Framework, MFC y ATL.
Si se aplica un filtro de lenguaje (por ejemplo, Visual C#), los temas de desarrollo de dispositivos inteligentes se excluyen de los
temas visibles. Por esta razón, la mejor opción es utilizar el filtro de Desarrollo de Smart Device o no aplicar ningún filtro.
También conviene señalar que se asigna un filtro de lenguaje de forma predeterminada si se inicia sesión en Visual Studio
utilizando una configuración de desarrollo de lenguaje, como Configuración de desarrollo de Visual C.
Para establecer el filtro de Desarrollo de Smart Device
1. En el menú Ayuda de Visual Studio, haga clic en Contenido o en Índice.
2. En el cuadro Filtrado por, seleccione Desarrollo de Smart Device.
Para cambiar la configuración de desarrollo
1. En el menú Herramientas de Visual Studio, haga clic en Importar y exportar configuraciones.
2. En la página Pantalla de bienvenida del asistente, haga clic en Restablecer todas las configuraciones y, a
continuación, haga clic en Siguiente.
Si no está seguro de las opciones, presione F1 para abrir el tema de Ayuda del asistente.
3. En la página Guardar configuración actual, seleccione la opción para guardar la configuración actual y, a continuación,
haga clic en Siguiente.
4. En la página Elija una colección predeterminada de configuraciones, seleccione Configuración general de
desarrollo y, a continuación, haga clic en Finalizar.
Vea también
Tareas
Cómo: Utilizar la biblioteca de clases de .NET Compact Framework
Conceptos
Filtros de Ayuda para Visual Studio
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Cómo: Iniciar el emulador de dispositivos en Visual Studio


El emulador de dispositivos puede actuar como sustituto de un dispositivo físico durante gran parte del ciclo de desarrollo de
un proyecto para dispositivos inteligentes. El emulador de dispositivos admite muchas opciones, como especificar el tamaño
de la memoria RAM, pero no todos los SDK admiten todas las opciones. Para obtener información más detallada, compruebe
la documentación del SDK.
Para obtener más información, inicie el emulador de dispositivos y haga clic en Ayuda.
Para iniciar el emulador de dispositivos mediante el cuadro de diálogo Conectar con dispositivo
1. En el menú Herramientas de Visual Studio, haga clic en Conectar con dispositivo.
2. En el cuadro de diálogo Conectar con dispositivo, seleccione un emulador en el cuadro Dispositivos y, a continuación,
haga clic en Conectar.
Para iniciar el emulador de dispositivos mediante el Administrador del emulador de dispositivos
1. En el menú Herramientas de Visual Studio, haga clic en Administrador del emulador de dispositivos.
2. En la ventana Administrador del emulador de dispositivos, haga clic con el botón secundario del mouse en el
emulador que desee iniciar.
3. En el menú contextual, haga clic en Conectar.
Vea también
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Actualizar proyectos creados con herramientas antiguas


Microsoft Visual Studio 2005 proporciona herramientas de desarrollo eficaces al desarrollador de dispositivos inteligentes. Los
programadores que utilizan C# y Visual Basic pueden aprovecharse de las ventajas de las herramientas mejoradas ofrecidas
por Visual Studio 2005, y ahora es posible crear proyectos de C++ para un dispositivo Pocket PC, Smartphone o Windows CE
utilizando el mismo entorno de desarrollo que se usa para crear aplicaciones de escritorio.
Entre las mejoras del entorno de desarrollo de Visual Studio 2005 se incluyen las siguientes:
Herramientas de refactorización de código fuente de C#. Para obtener más información, vea Refactorización.
Depuración mejorada. Para obtener más información, vea Depurar proyectos de dispositivos.
Fragmentos de código para C# y Visual Basic. Para obtener más información, vea Crear y utilizar fragmentos de código
de IntelliSense.
Herramientas de implementación mejoradas. Para obtener más información, vea Información general sobre el
empaquetado de soluciones para dispositivos.
Emuladores de dispositivos inteligentes mejorados. Para obtener más información, vea Cómo: Iniciar el emulador de
dispositivos en Visual Studio.

Migrar proyectos de eMbedded Visual C++ a Visual Studio 2005


Existe la posibilidad de migrar proyectos de eMbedded Visual C++ mediante un asistente para migración. Para obtener más
información, vea Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005.
Migrar proyectos de eMbedded Visual Basic a Visual Studio 2005
Los proyectos creados en eMbedded Visual Basic (eVB) no se convierten automáticamente en proyectos de Visual Studio 2005.
En su lugar, se deben agregar los archivos de recursos y de código fuente existentes a un nuevo proyecto de Smart Device de
Visual Basic creado en Visual Studio 2005.
Nota
Los dispositivos de Windows Mobile 2003 no contienen los motores en tiempo de ejecución de eMbedded Visual Basic en R
OM y, aunque estos se pueden descargar al dispositivo como una instalación en RAM, esta configuración no se admite.

Para obtener más información sobre el uso de Visual Studio 2005 para convertir un proyecto de eVB, vea los temas siguientes:
Migrating eVB File Controls to Visual Basic .NET
Migrating eVB Forms to Visual Basic .NET
Migrar proyectos administrados de Visual Studio .NET 2003 a Visual Studio 2005
Los proyectos para dispositivos inteligentes de Visual C# y Visual Basic desarrollados en Visual Studio .NET 2003 se pueden
importar a Visual Studio 2005. El Asistente de conversión de Visual Studio realiza los cambios necesarios en los proyectos.
Actualizar proyectos de dispositivos en 2002 a dispositivos en 2003
Para obtener más información sobre cómo actualizar proyectos de Windows Mobile 2000 a Windows Mobile 2003, vea
Windows Mobile Platform Migration FAQ for Developers.
Vea también
Conceptos
Capacidades de dispositivos y herramientas de desarrollo necesarias
Otros recursos
Introducción a los proyectos para Smart Device
Migrar al entorno de eVC 4.0
Desarrollo para Smart Device

Cómo se desarrollan aplicaciones para Smart Device


Este tema se ha actualizado para Visual Studio 2005 SP1.
Visual Studio 2005 proporciona compatibilidad enriquecida e integrada para desarrollar software que se ejecute en
dispositivos inteligentes basados en Windows CE y Windows Mobile, como Pocket PC y Smartphones. Es posible utilizar Visual
C# o Visual Basic para crear aplicaciones administradas que se ejecuten en .NET Compact Framework o bien es posible crear
aplicaciones nativas utilizado Visual C++. Independientemente del lenguaje que se elija, es posible utilizar el mismo editor de
código, diseñadores e interfaz de depurador que se utilizaría cuando se desarrollase para PC. Simplemente seleccione una de
las plantillas de proyecto de Smart Devices que se encuentre disponible para el lenguaje que se seleccione y comience la
codificación.
Visual Studio también proporciona emuladores, con el fin de que se pueda ejecutar y depurar un determinado código en un
equipo de desarrollo específico sin la necesidad de contar con un dispositivo físico.
Introducción (Cómo se utiliza Smart Devices)
Aplicaciones para Windows Forms… Iniciar el emulador de dispositivos… Qué herramientas admiten qué versiones…
Seleccione un lenguaje de desarrollo… Utilice filtros para la Ayuda… más…
Conexiones de dispositivos (Cómo en Dispositivos inteligentes)
Sesiones de Virtual PC… DMA.… Bluetooth… Ningún ActiveSync... Solución de problemas... más...
Visual Basic y Visual C# (Cómo se utiliza en Smart Devices)
Crear proyectos… Compartir código fuente… Cambiar plataformas… Fragmentos de código… Cambiar destino
predeterminado… más…
Visual C++ (Cómo se utiliza en Smart Devices)
Crear proyecto de dispositivos de C++… Migrar eMbedded Visual C++… Agregar SQL Server Mobile Edition o SQL Server
Compact Edition… Desarrollar soluciones multiplataforma… Crear host ActiveX MFC… más…
Depurar (Cómo se depura en Smart Devices)
Agregar a procesos… Depurar soluciones mezcladas… Cambiar el Registro de dispositivos… más…
Datos (Cómo se escriben en Smart Devices)
Crear y administrar bases de datos… Agregar orígenes de datos a proyectos… Generar consultas… Procesar relaciones
principal-detalle… Producir conjuntos de resultados o conjuntos de datos… más…
Empaquetar (Cómo se empaqueta en Smart Devices)
Crear proyecto CAB… Crear accesos directos… Editar el Registro de dispositivos… más…
Seguridad (Cómo se aplica en el desarrollo de Smart Device)
Importar certificados… Consultar modelo de seguridad… Firmar archivos… Suministrar dispositivos… más…
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Desarrollo para Smart Device

Introducción (Cómo se utiliza Smart Devices)


Esta página establece vínculos con temas comunes de la Ayuda para iniciarse en el desarrollo de aplicaciones de dispositivos
inteligentes.
Lo nuevo en proyectos de Smart Device
Describe características nuevas o mejoradas para el desarrollo de aplicaciones de dispositivos en Visual Studio 2005.
Capacidades de dispositivos y herramientas de desarrollo necesarias
Describe varias versiones y actualizaciones de dispositivos inteligentes y las herramientas necesarias para la compatibilidad
con cada uno de ellos.
Herramientas remotas para proyectos de dispositivos
Enumera herramientas especiales utilizadas para el desarrollo de aplicaciones de dispositivos y proporciona vínculos
detallados a temas de la Ayuda para cada una de ellas.
Cómo: Optimizar la Ayuda para el desarrollo de Smart Device
Describe la mejor manera de utilizar la Ayuda para proyectos de dispositivos, incluido el uso de filtros.
Cómo: Iniciar el emulador de dispositivos en Visual Studio
Describe cómo abrir esta herramienta, regularmente utilizada, que emula a un dispositivo físico.
Actualizar proyectos creados con herramientas antiguas
Describe cómo establecer el puerto de proyectos desarrollados con herramientas y versiones anteriores.
Seleccionar un lenguaje de programación
Compara Visual Basic, Visual C# y Visual C++ como lenguajes de desarrollo para proyectos de dispositivos.
Tutorial: Crear aplicaciones de Windows Forms para un dispositivo
Proporciona instrucciones paso a paso para el desarrollo de una aplicación Windows Forms y la ejecución de dicha
aplicación en el emulador de dispositivos.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Introducción a Visual Studio
Otros recursos
Entorno de desarrollo integrado de Visual Studio
Desarrollo para Smart Device

Conexiones de dispositivos (Cómo en Dispositivos inteligentes)


Esta página contiene un vínculo a ayuda sobre las tareas de conexión de dispositivos más comunes.
Cómo: Conectar al emulador de dispositivos en una sesión de Virtual PC
Describe la técnica para establecer una conexión a falta de TCP/IP.
Cómo: Obtener acceso al sistema de archivos del emulador de Smartphone
Describe cómo obtener acceso al sistema de archivos del emulador de Smartphone, que no tiene su propio visor de archivos.
Cómo: Conectar mediante Bluetooth
Describe cómo conectar utilizando Bluetooth.
Cómo: Conectar mediante IR
Describe cómo conectar utilizando Infrared.
Cómo: Conectar a un dispositivo basado en Windows CE sin ActiveSync
Describe los pasos que hay que seguir para conectar a un dispositivo cuando los servicios de ActiveSync no están
disponibles.
Cómo: Obtener acceso a los archivos del equipo de desarrollo desde el emulador
Describe cómo utilizar una carpeta compartida para tener acceso a los archivos del equipo de desarrollo desde el emulador.
Cómo: Establecer opciones de conexión (dispositivos)
Describe dónde encontrar los cuadros de diálogo comunes para establecer opciones de conexión.
Vea también
Tareas
Solucionar problemas de conectividad (dispositivos)
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Selección del método de conexión
Desarrollo para Smart Device

Visual Basic y Visual C# (Cómo se utiliza en Smart Devices)


Esta página establece vínculos con la Ayuda sobre tareas comunes de desarrollo con .NET Compact Framework.
Cómo: Crear aplicaciones para dispositivos utilizando Visual C# o Visual Basic
Describe cómo crear aplicaciones de dispositivos y cómo difiere este proceso con respecto a la creación de aplicaciones de
escritorio.
Cómo: Compartir código fuente entre plataformas (Dispositivos)
Describe la utilización de constantes del compilador para compartir el mismo código fuente en las diferentes plataformas.
Cómo: Cambiar plataformas en proyectos de dispositivos
Describe cómo cambiar de una plataforma a otra en el mismo proyecto.
Cómo: Actualizar proyectos a las versiones más recientes de .NET Compact Framework
Describe cómo actualizar la plataforma de un proyecto existente si se instala una versión posterior de la plataforma.
Administrar fragmentos de código en proyectos de dispositivos
Describe cómo utilizar fragmentos de código que pertenecen exclusivamente a proyectos de dispositivos.
Cómo: Comprobar la compatibilidad del código en plataformas en proyectos de dispositivos
Describe cómo asegurar que la plataforma de destino admite un código determinado.
Cómo: Controlar eventos de HardwareButton (Dispositivos)
Describe cómo reemplazar las claves de aplicación en un Pocket PC.
Cómo: Cambiar la orientación y la resolución de formularios (Dispositivos)
Describe cómo cambiar la orientación y la resolución si los valores predeterminados faltan o son incorrectos.
Cómo: Cambiar el dispositivo predeterminado (Proyectos administrados)
Describe cómo cambiar el dispositivo de destino durante el desarrollo del proyecto.
Cómo: Optimizar la Ayuda para el desarrollo de Smart Device
Describe cómo utilizar el filtro de la Ayuda para Smart Device con el fin de mostrar sólo los elementos de .NET Framework
admitidos para proyectos de dispositivos.
Vea también
Referencia
Datos (Cómo se escriben en Smart Devices)
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Temas Cómo... de .NET Compact Framework
Otros recursos
Programación para dispositivos con .NET Compact Framework
.NET Compact Framework
Datos en proyectos de dispositivos administrados
Desarrollo para Smart Device

Visual C++ (Cómo se utiliza en Smart Devices)


Esta página establece un vínculo con la Ayuda concerniente a las tareas comunes de C++ en dispositivos inteligentes.
En general
Compatibilidad con dispositivos para los proyectos de escritorio
Proporciona una lista de temas relevantes que ayudan a abordar varias plataformas, incluido el escritorio.
Editar recursos en proyectos de dispositivos nativos
Explica las similitudes y diferencias existentes entre los editores de recursos disponibles para dispositivos en contraposición
a los disponibles para el escritorio.
Cómo: Agregar una base de datos a un proyecto de dispositivos nativo
Explica cómo desarrollar aplicaciones Smart Device de C++ que incluyen una base de datos de SQL Server Mobile Edition o
SQL Server Compact Edition.
Cómo: Especificar la ruta de acceso remota del resultado principal del proyecto
Explica cómo establecer la ruta de acceso remota.
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Explica cómo cambiar el destino predeterminado en un proyecto de dispositivos de C++.
Crear y migrar
Cómo: Crear un proyecto de dispositivos de Visual C++
Describe la creación de aplicaciones de C++ para dispositivos en contraposición a las aplicaciones que se ejecutan en el
escritorio.
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Describe cómo abordar varios dispositivos desde el mismo proyecto de desarrollo de C++.
Problemas conocidos con el traslado desde eVC
Describe cómo migrar los proyectos de EMbedded Visual C++ 4.0 a Visual Studio.
MFC
Tutorial: Crear una aplicación MFC multiplataforma para Smart Devices
Se centra en establecer como destino varias plataformas.
Tutorial: Crear un control ActiveX MFC multiplataforma para Smart Devices
Se centra en crear un control ActiveX utilizando MFC para dispositivos.
Cómo: Encontrar la Ayuda para los métodos y clases MFC compatibles con dispositivos
Describe cómo utilizar el filtro de Ayuda de Smart Device para mostrar sólo los elementos de MFC admitidos para proyectos
de dispositivos.
ATL
Tutorial: Crear un control ActiveX ATL multiplataforma para Smart Devices
Se centra en crear un control ActiveX utilizando ATL para dispositivos.
Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles con dispositivos
Describe cómo utilizar el filtro de Ayuda de Smart Device para mostrar sólo los elementos de ATL admitidos para proyectos
de dispositivos.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Otros recursos
Visual C++
Desarrollo para Smart Device

Depurar (Cómo se depura en Smart Devices)


Esta página establece vínculos con los temas de ayuda relacionados con las tareas de depuración de Smart Devices y las
diferencias existentes entre tareas similares para proyectos de escritorio.
Diferencias entre depuradores de dispositivos y de escritorio
Muestra las características no admitidas o admitidas, hasta cierto punto, y describe otras características de cordbg.exe para la
depuración de dispositivos.
Cómo: Conectar a procesos de dispositivos administrados
Describe cómo realizar asociaciones a un proceso que ya se está ejecutando sin el depurador.
Cómo: Cambiar la configuración del Registro en un dispositivo
Describe cómo utilizar el Editor de Registro remoto para modificar la configuración del Registro en el dispositivo.
Tutorial: Depurar una solución que incluye código administrado y código nativo
Describe cómo depurar estas soluciones mixtas.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Otros recursos
Depurar en Visual Studio
Desarrollo para Smart Device

Datos (Cómo se escriben en Smart Devices)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Esta página establece un vínculo con la Ayuda en lo que respecta a tareas comunes de control de datos en dispositivos
inteligentes.
En general
Cómo: Generar código SqlCeResultSet (Dispositivos)
Describe cómo generar conjuntos de resultados en lugar de conjuntos de datos.
Cómo: Cambiar la cadena de conexión en tiempo de diseño (Dispositivos)
Describe cómo cambiar la cadena que Visual Studio utiliza para conectar a una base de datos de SQL Server Mobile o SQL
Server Compact Edition en tiempo de diseño.
Cómo: Cambiar la cadena de conexión en tiempo de ejecución (Dispositivos)
Describe cómo cambiar la cadena que la aplicación utiliza para conectarse a una base de datos de SQL Server Mobile o SQL
Server Compact Edition en tiempo de ejecución.
Cómo: Agregar botones de exploración (Dispositivos)
Describe una alternativa a la clase DataNavigator, que .NET Compact Framework no admite.
Cómo: Conservar cambios de datos en la base de datos (Dispositivos)
Describe cómo volver a aplicar cambios del conjunto de datos a la base de datos.
Agregar orígenes de datos
Cómo: Crear una base de datos (Dispositivos)
Describe cómo utilizar el entorno de Visual Studio para crear una base de datos de SQL Server Mobile o SQL Server
Compact Edition, dentro o fuera de un proyecto.
Cómo: Agregar una base de datos a un proyecto de dispositivos
Describe cómo agregar una base de datos de SQL Server Mobile o SQL Server Compact Edition, disponible en el Explorador
de servidores, como origen de datos para un proyecto de Visual Basic o Visual C#.
Cómo: Agregar una base de datos de SQL Server como origen de datos (Dispositivos)
Describe cómo agregar una base de datos de SQL Server como un origen de datos para un proyecto de Visual Basic o de
Visual C#.
Cómo: Agregar un objeto comercial como origen de datos (Dispositivos)
Describe cómo agregar un objeto comercial como un origen de datos para un proyecto de Visual Basic o de Visual C#.
Cómo: Agregar un servicio Web como origen de datos (Dispositivos)
Describe cómo agregar un servicio Web como un origen de datos para un proyecto de Visual Basic o de Visual C#.
Administrar orígenes de datos
Cómo: Administrar tablas en una base de datos (Dispositivos)
Describe cómo agregar y quitar tablas y cómo editar un esquema de tabla existente.
Cómo: Administrar columnas en una base de datos (Dispositivos)
Describe cómo agregar y quitar columnas y cómo editar sus propiedades.
Cómo: Administrar índices en una base de datos (Dispositivos)
Describe cómo agregar y quitar índices y cómo cambiar la propiedad de criterio de ordenación.
Cómo: Administrar contraseñas para bases de datos (Dispositivos)
Describe cómo establecer una contraseña para una base de datos de SQL Mobile o SQL Server Compact Edition y cómo
cambiar una contraseña de una base de datos existente.
Cómo: Reducir y reparar una base de datos (Dispositivos)
Describe cómo comprimir y reparar bases de datos de SQL Server Mobile Edition o SQL Server Compact Edition.
Generar consultas
Cómo: Crear consultas parametrizadas (Dispositivos)
Describe cómo crear consultas parametrizadas.
Tutorial: Aplicación de consulta parametrizada
Proporciona instrucciones paso a paso para un proyecto de un extremo a otro que incluye la generación de una consulta
parametrizada.
Procesar relaciones principal-detalle
Cómo: Crear aplicaciones Principal-Detalle (Dispositivos)
Describe cómo implementar una relación principal-detalle.
Tutorial: Aplicación Principal-Detalle para una base de datos
Proporciona instrucciones paso a paso para un proyecto de un extremo a otro que incluye la creación y ejecución de una
aplicación principal-detalle.
Ver y modificar datos
Cómo: Obtener una vista previa de datos en una base de datos (Dispositivos)
Describe varias opciones para ver datos en una base de datos.
Cómo: Generar vistas de resumen y edición para aplicaciones de datos (Dispositivos)
Describe cómo utilizar formularios de datos para ver y modificar filas únicas de datos en una cuadrícula de datos.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Otros recursos
Datos en proyectos de dispositivos administrados
Overview of SQL Server 2005 Mobile Edition
Obtener acceso a datos (Visual Studio)
Desarrollo para Smart Device

Empaquetar (Cómo se empaqueta en Smart Devices)


Esta página establece un vínculo con la ayuda concerniente a las tareas de empaquetado y configuración en los proyectos de
dispositivos.
Tutorial: Empaquetar una solución Smart Device para su implementación
Proporciona instrucciones paso a paso para empaquetar una aplicación y sus recursos.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Características de IDE compatibles con el empaquetado de aplicaciones para dispositivos
Información general sobre el empaquetado de soluciones para dispositivos
Desarrollo para Smart Device

Seguridad (Cómo se aplica en el desarrollo de Smart Device)


Esta página establece un vínculo con la Ayuda concerniente a las tareas comunes de seguridad en dispositivos inteligentes.
En general
Cómo: Importar y aplicar certificados en proyectos de dispositivos
Describe el uso eficaz del cuadro de diálogo Seleccionar certificado para la firma de proyectos de dispositivos.
Cómo: Iniciar Signtool.exe como evento posterior a la generación (Dispositivos)
Describe cómo firmar un proyecto cuando los eventos posteriores a la generación han cambiado los binarios originales.
Cómo: Consultar un dispositivo para conocer su modelo de seguridad
Describe cómo determinar los certificados que ya están instalados en el almacén de certificados de dispositivos.
Firmar
Cómo: Firmar una aplicación de Visual Basic o Visual C# (Dispositivos)
Muestra los pasos que hay que seguir para firmar una aplicación escrita en comparación con .NET Compact Framework.
Cómo: Firmar un ensamblado de Visual Basic o Visual C# (Dispositivos)
Muestra los pasos que hay que seguir para firmar los ensamblados de proyectos.
Cómo: Firmar los resultados del proyecto en un proyecto de Visual C++ (Dispositivos)
Muestra los pasos que hay que seguir para firmar los resultados de proyectos en Visual C++.
Cómo: Firmar un archivo CAB (Dispositivos)
Muestra los pasos que hay que seguir para firmar un proyecto CAB de dispositivos.
Poner en servicio
Cómo: Poner en servicio un dispositivo en un proyecto de Visual Basic o Visual C#
Muestra los pasos que hay que seguir para agregar certificados digitales al almacén de dispositivos en proyectos
administrados.
Cómo: Poner en servicio un dispositivo en un proyecto de Visual C++
Muestra los pasos que hay que seguir para agregar certificados digitales al almacén de dispositivos en proyectos nativos.
Cómo: Poner en servicio un dispositivo con un modelo de seguridad
Describe el uso de RapiConfig.exe para proporcionar un dispositivo con un modelo de seguridad.
Vea también
Conceptos
Cómo se desarrollan aplicaciones para Smart Device
Otros recursos
Seguridad del código nativo y del código de .NET Framework
Desarrollo para Smart Device

Consideraciones de diseño para el desarrollo de aplicaciones


para Smart Device
Visual Studio 2005 proporciona tres lenguajes de programación diferentes y varios tipos de proyectos distintos para el
desarrollo de dispositivos inteligentes. Esta sección contiene un resumen de dichos tipos de proyectos, junto con una pequeña
orientación acerca de cómo seleccionar el lenguaje más adecuado para el proyecto en cuestión.
En esta sección
Seleccionar un tipo de proyecto Smart Device
Proporciona información general sobre varios proyectos de dispositivos inteligentes distintos que se encuentran disponibles
en Visual Studio 2005 y las diferentes plataformas de hardware que admiten.
Seleccionar un lenguaje de programación
Proporciona orientación a la hora de elegir el mejor lenguaje de desarrollo para el proyecto en cuestión.
Personalizar máscaras (dispositivos)
Describe máscaras en proyectos de dispositivos inteligentes y cómo es posible personalizarlos.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Programación de dispositivos inteligentes
Mobile Developer Center
Desarrollo para Smart Device

Seleccionar un tipo de proyecto Smart Device


Visual Studio 2005 proporciona las siguientes plantillas de proyecto para crear nuevos proyectos Smart Device. Las plantillas
marcadas con "(1.0)" indican que los proyectos están basados en la versión 1.0 de .NET Compact Framework. Las plantillas
restantes hacen referencia a aquellos proyectos basados en la versión 2.0.
Visual C# y Visual Basic
Nombre de plantilla Dispositivos compatibles Comentarios
Aplicación de dispositiv Pocket PC 2003, Windows C Proyecto para crear una aplicación de Windows Forms de .NET Compact
o E 5.0 Framework 2.0.

Biblioteca de controles Pocket PC 2003, Windows C Proyecto para crear controles de .NET Compact Framework 2.0.
E 5.0

Biblioteca de clases Pocket PC 2003, Windows C Proyecto para crear una biblioteca de clases (DLL) de .NET Compact Fra
E 5.0 mework 2.0.

Aplicación de consola Pocket PC 2003, Windows C Proyecto para crear una aplicación no gráfica de .NET Compact Framew
E 5.0 ork 2.0.

Proyecto vacío Pocket PC 2003, Windows C Proyecto vacío para crear una aplicación de .NET Compact Framework 2.
E 5.0 0.

Aplicación de dispositiv Pocket PC 2003, Smartphon Proyecto para crear una aplicación de Windows Forms de .NET Compact
o (1.0) e 2003 Framework 1.0.

Biblioteca de clases (1.0) Pocket PC 2003, Smartphon Proyecto para crear una biblioteca de clases (DLL) de .NET Compact Fra
e 2003 mework 1.0.

Aplicación de consola (1 Pocket PC 2003, Smartphon Proyecto para crear una aplicación no gráfica de .NET Compact Framew
.0) e 2003 ork 1.0.

Proyecto vacío (1.0) Pocket PC 2003, Smartphon Proyecto vacío para crear una aplicación de .NET Compact Framework 1.
e 2003 0.

Visual C++
Nombre de plantilla Dispositivos compatibles Comentarios
Proyectos ATL para Sma Pocket PC 2003, Smartphone 20 Proyecto para crear una aplicación utilizando Active Template Librar
rt Device 03, Windows CE 5.0 y.

Proyecto para Smart De Pocket PC 2003, Smartphone 20 Proyecto para crear una aplicación utilizando la biblioteca Microsoft
vice MFC 03, Windows CE 5.0 Foundation Class.

Control ActiveX para Sm Pocket PC 2003, Smartphone 20 Proyecto para crear un control ActiveX utilizando la biblioteca Micro
art Device MFC 03, Windows CE 5.0 soft Foundation Class.

DLL para Smart Device Pocket PC 2003, Smartphone 20 Proyecto para crear una biblioteca de vínculos dinámicos utilizando
MFC 03, Windows CE 5.0 la biblioteca Microsoft Foundation Class.

Proyecto Win32 Pocket PC 2003, Smartphone 20 Proyecto para la creación de una aplicación Win32.
03, Windows CE 5.0

Otros tipos de proyectos


Nombre de planti Dispositivos compatibles Comentarios
lla
Proyecto CAB de S Pocket PC 2003, Smartphone 200 Proyecto para la creación de un archivo CAB file con el fin de impleme
mart Device 3, Windows CE 5.0 ntar aplicaciones para Smart Device.

Vea también
Conceptos
Seleccionar un lenguaje de programación
Desarrollo para Smart Device

Seleccionar un lenguaje de programación


Al desarrollar una aplicación, control o biblioteca para su implementación en un entorno Smart Device, hay tres lenguajes de
programación para elegir: Visual C#, Visual Basic y Visual C++.
Visual C#
C# es un lenguaje moderno y orientado a objetos. Las características de la recolección de elementos no utilizados y la
compatibilidad con las clases de .NET Compact Framework hacen que sea un idioma ideal a la hora de desarrollar aplicaciones
móviles confiables y seguras. Visual C# para Smart Devices incluye una amplia cantidad de controles para crear de forma
rápida una interfaz de usuario gráfica (GUI) y las clases de Compact Framework admiten características como GDI+, XML y
Servicios Web. Visual C# también puede llamar a funciones de Windows CE nativas para aquellas situaciones que .NET
Compact Framework no admita.
Para obtener más información sobre cómo desarrollar con Visual C# y obtener acceso a funciones nativas de Windows CE, vea:
Introducción a Visual Studio .NET y Microsoft .NET Compact Framework
Referencia de C#
Introducción a P/Invoke y cómo calcular referencias en Microsoft .NET Compact Framework
Crear una biblioteca de P/Invoke
P/Invoke avanzado en Microsoft .NET Compact Framework
Visual Basic
Visual Basic para Smart Devices supone toda una implementación con respecto a Visual Basic y es una herramienta mucho
más potente que la herramienta de desarrollo anterior, Visual Basic incrustado. Visual Basic simplifica en gran medida la tarea
de trasladar una aplicación de escritorio a un dispositivo móvil o de crear rápidamente una aplicación cliente enriquecida. Al
igual que ocurre con Visual C#, Visual Basic utiliza .NET Compact Framework. Los desarrolladores, ya familiarizados con Visual
Basic, podrán trasladar las aplicaciones existentes o crear otras nuevas de forma muy rápida. Al igual que ocurre con C#, Visual
Basic puede obtener acceso a funciones nativas de Windows CE.
Para obtener más información sobre cómo desarrollar en Visual Basic, vea:
Introducción a Visual Studio .NET y Microsoft .NET Compact Framework
Referencia de Visual Basic

Visual C++
Visual C++ es el lenguaje de desarrollo que se prefiere para Smart Devices cuando el rendimiento es fundamental o a la hora
de desarrollar aplicaciones de nivel de sistema, controladores de dispositivos o complementos de pantalla Home o Today.
Visual C++ no admite .NET Compact Framework, pero en su lugar proporciona un subconjunto del conjunto API Win32. Esto
es posible para aplicaciones escritas en código de C# administrado o de Visual Basic para tener acceso a código de C++
contenido en archivos DLL mediante interoperabilidad.
Para obtener más información sobre cómo desarrollar en Visual C++, vea:
C/C++ Languages
Vea también
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Personalizar máscaras (dispositivos)


Una máscara es un gráfico que rodea la forma rectangular, el área de visualización, de una aplicación en el emulador de
dispositivos o en el diseñador de Visual Studio. La utilización una máscara durante el desarrollo de aplicaciones permite
visualizar mejor el aspecto que tendrá la aplicación en un dispositivo real. Puede utilizar las mismas máscaras en los
diseñadores Visual Studio y en el emulador de dispositivos.
Además de proporcionar una mejora visual, las máscaras pueden ofrecen funcionalidades como el procesamiento de eventos
del mouse para botones de hardware y teclas programables.
Nota
Si los archivos de máscara que se instalan con Visual Studio resultan dañados, puede volver a instalarlos reparando la instala
ción de Visual Studio 2005. Para obtener más información, vea Cómo: Registrar Visual Studio.

En esta sección
Tecnología de máscara (dispositivos)
Describe el archivo de definición de máscara XML y los requisitos de los archivos de gráficos para máscaras.
Cómo: Crear archivos de máscara (dispositivos)
Describe los pasos para crear una máscara simple.
Cómo: Cambiar las características visuales de las máscaras (dispositivos)
Describe las modificaciones que pueden realizarse en el archivo de definición de máscara y que afectan la barra de títulos del
emulador, la ubicación y la dimensión del área de visualización, y si la máscara aparecerá o no en un marco o en una
transparencia.
Cómo: Procesar los eventos del mouse (ratón) (dispositivos)
Describe el uso de la asignación de colores para especificar las áreas de la máscara, también denominadas zonas interactivas,
que pueden responder a eventos del mouse.
Cómo: Exponer la información sobre herramientas (dispositivos)
Describe cómo proporcionar información sobre herramientas para las zonas interactivas de las máscaras.
Cómo: Utilizar máscaras con el emulador de dispositivos
Describe las opciones disponibles en la interfaz de usuario del emulador de dispositivos (incluida la elección de la máscara),
cómo guardar la máscara con una imagen de SO y cómo mostrar u ocultar la información sobre herramientas.
Cómo: Utilizar máscaras con Visual Studio 2005 (dispositivos)
Describe las opciones disponibles en la interfaz de usuario de Visual Studio: configurar las opciones predeterminadas,
especificar la resolución, habilitar la rotación, etc.
Detalles de un archivo de definición de máscara (dispositivos)
Describe los elementos individuales, tanto los necesarios como los opcionales, que aparecen en un archivo de definición de
máscara y ofrece valores de ejemplo.
Ejemplo de archivo de definición de máscara (dispositivos)
Presenta un archivo de definición de máscara completo.
Vea también
Otros recursos
Consideraciones de diseño para el desarrollo de aplicaciones para Smart Device
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Tecnología de máscara (dispositivos)


Una máscara se compone de hasta tres archivos BMP (mapa de bits) o PNG (Portable Network Graphics) y un solo archivo de
definición de máscara con formato XML (Lenguaje de marcado extensible). El archivo de definición de máscara y los archivos
BMP o PNG asociados deben estar en el mismo directorio.
El archivo XML describe cómo funciona la máscara y dónde encontrar los archivos BMP o PNG. El archivo XML también
define acciones de botón basadas en el código de color que aparece en el archivo de asignación. Para obtener más
información, vea Ejemplo de archivo de definición de máscara (dispositivos).
Un archivo BMP o PNG, al que se hace referencia como archivo de imágenes normal, muestra el aspecto predeterminado
de la máscara del emulador. El archivo de imágenes normal es el único archivo que necesita la máscara del emulador.
Un segundo archivo opcional, BMP o PNG, al que se hace referencia como archivo de imagen down (de botón
presionado), muestra el aspecto de la máscara con todos los botones presionados.
Un tercer archivo opcional, BMP o PNG, al que se hace referencia como archivo de asignación (mapping), muestra un código
de color por cada botón de la máscara. El código de color de cada botón queda representado en el archivo de asignación como
un área de un solo color que cubre completamente el botón en cuestión. El usuario de la máscara no ve los colores
representados como códigos en el archivo de asignación.
Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Crear archivos de máscara (dispositivos)


Puede crear nuevas máscaras o personalizar máscaras existentes usando las mismas técnicas. Los fabricantes OEM utilizan
herramientas de gráficos de alto rendimiento para diseñar y desarrollar los archivos gráficos necesarios para las máscaras. No
obstante, puede lograr resultados satisfactorios utilizando herramientas más sencillas, incluso con Microsoft Paint. Puede
escribir el archivo de definición de máscaras (un archivo XML) utilizando una herramienta sencilla como el Bloc de notas de
Microsoft.
Para personalizar una máscara existente, guarde los archivos de máscara existentes con nuevos nombres y modifíquelos. Si
desea utilizar nuevas máscaras, asegúrese de que todos los archivos de cada máscara, es decir, el archivo de definición de la
máscara y los archivos de gráficos que lo acompañan, compartan el mismo directorio.
A continuación, se describen los pasos para crear una nueva máscara. Para obtener más información, vea Tecnología de
máscara (dispositivos).
Para crear una nueva máscara
1. Cree un archivo de mapa de bits (BMP) o de gráficos de red portátiles (PNG) que muestre el aspecto predeterminado de
la máscara.
2. Cree un archivo BMP o PNG que muestre el aspecto de la máscara con todos los botones presionados.
3. Cree un archivo BMP o PNG que muestre el área de cada botón relleno con un único color.
Estos colores del botón representan las zonas interactivas y se utilizan para controlar los eventos del mouse. Si desea que
el aspecto de cada botón cambie independientemente de los otros botones de la máscara, utilice un color diferente para
rellenar el área de cada botón. Para obtener más información, vea Cómo: Procesar los eventos del mouse (ratón)
(dispositivos).
Nota
Para mejorar la visibilidad, no utilice el blanco ni el negro para rellenar el área.

4. Crear un archivo de definición de máscaras.


Para obtener más información, vea Detalles de un archivo de definición de máscara (dispositivos) y Ejemplo de archivo
de definición de máscara (dispositivos).
5. Guarde los tres archivos BMP o PNG y el archivo .xml en un mismo directorio.

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Cambiar las características visuales de las máscaras


(dispositivos)
Puede cambiar algunas características visuales de la máscara.
Nota
El término área de visualización describe el área de la ventana dentro de la máscara en la que aparece la interfaz de usuario d
e una aplicación.

Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para cambiar la redacción en la barra de título del emulador de dispositivos


En el archivo de definición de máscara, redacte de nuevo el elemento titleBar. Por ejemplo:

titlebar = "My Device"

Para cambiar la ubicación del área de visualización dentro de la máscara


En el archivo de definición de máscara, cambie el valor asignado a los ejes x e y.
Por ejemplo, el esquema predeterminado de Pocket PC 2003 Second Edition muestra displayPosX = "51" y displayPosY
= "47." Al aumentar el valor de displayPosX, el área de visualización se desplaza hacia la derecha. Si se aumenta el valor
de displayPoxY, el área de visualización se desplazará hacia abajo.

Para cambiar el alto y ancho del área de visualización


En el archivo de definición de máscara, cambie el valor asignado a los elementos displayWidth y displayHeight.
Por ejemplo, el esquema predeterminado de Pocket PC 2003 Second Edition muestra displayWidth="240" y
displayHeight="320". Al aumentar el valor de displayWidth, la dimensión horizontal del área de visualización se
extiende hacia la derecha. Al aumentar el valor de displayHeight, la dimensión vertical del área de visualización se
extiende hacia abajo.
Para cambiar los colores del monitor del área de visualización
En el archivo de definición de máscara, cambie el valor asignado al elemento displayDepth.
Por ejemplo, el esquema predeterminado de Pocket PC 2003 Second Edition muestra displayDepth="16".
Nota
Los colores del monitor, también denominados profundidad de bits, representan el número de bits disponible para defi
nir un color para cada píxel. Las máscaras de los dispositivos inteligentes suelen tener una profundidad de color de 16.

Para implementar la transparencia de fondo


Establezca el píxel inferior izquierdo del archivo de gráficos Subir o Normal en el color transparente. Las máscaras que
actualmente distribuye Microsoft para Smartphone y Pocket PC emplean el valor de color FEFFFF para este propósito.
Nota
Utilice esta técnica para crear máscaras sin marco. Dicho de otro modo, el emulador de dispositivos y el gráfico del dise
ñador Visual Studio estarán enlazados mediante los elementos visuales de la máscara y no aparecen en un rectángulo
cuyo color de fondo probablemente no es el mismo que el de la ventana en la que aparece la máscara.

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Procesar los eventos del mouse (ratón) (dispositivos)


Además de usar las máscaras para ofrecer una réplica visual de un dispositivo real, también puede emplearlas para procesar
eventos del mouse, lo que permite emular dispositivos reales de un modo aún más realista.
Puede especificar lo que ocurre al hacer clic, presionar, situar o suspender el cursor sobre cualquier botón de la máscara
asignando un color único (mappingColor) a cada área de botones del archivo de definición de máscara. El color no se ve en la
interfaz de usuario. Sólo sirve para proporcionar un indicador único del control de los eventos en los diseñadores de Visual
Studio y el emulador de dispositivos.
Por ejemplo, si utiliza una herramienta gráfica para ver el archivo PocketPC_2003_Mask.PNG que se instala de forma
predeterminada en \Archivos de programa\Microsoft Visual Studio
8\SmartDevices\Skins\PocketPC_2003\PocketPC_2003\1033, verás que cada color se muestra con un color distinto.
Para procesar un evento onClick
1. En una etiqueta de botón del archivo de definición de máscara, asigne un valor de color a mappingColor.
El ejemplo siguiente está tomado del archivo de definición de máscara de Pocket PC 2003:

<button
toolTip="Soft Key 1"
onClick="DOWN:0x5b 0x70 UP:0x5b"
mappingColor="0xF26C4F"
/>

2. Asigne las pulsaciones de tecla al evento onClick.


Para obtener más información, vea los pasos siguientes para asociar un botón a una pulsación de tecla.
Si hace clic en el botón que tiene el color 0xF26C4F, se controlará el evento onClick especificado en esta sección de
botón. Las pulsaciones de tecla especificadas en el archivo de definición de máscara se pasan al motor.
Procesar un evento onPressAndHold
1. En una etiqueta de botón del archivo de definición de máscara, asigne un valor de color a mappingColor.
El ejemplo siguiente está tomado del archivo de definición de máscara de Pocket PC 2003:

<button
toolTip="Power"
onPressAndHold="0x75"
mappingColor="0xED145B"
/>

2. Asigne una pulsación de tecla al evento onPressAndHold.


Para obtener más información, vea los pasos siguientes para asociar un botón a una pulsación de tecla.
Si hace clic en cualquier botón que tenga el color 0xED145B, se controla el evento onPressAndHold especificado en esta
sección de botón.
Para asociar un botón a una pulsación de tecla
Utilice el código de exploración del teclado, como en los ejemplos anteriores o en un conjunto de constantes
predefinidas, como Key_Down.
Para obtener más información, vea Esquema XML de máscara de emulador en la biblioteca línea de MSDN.
Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Exponer la información sobre herramientas


(dispositivos)
Cada etiqueta de botón del archivo de definición de máscara puede incluir una línea para la información sobre herramientas. Si
se suspende el cursor sobre una zona activa de la máscara, emerge un elemento ToolTip (si se le ha asignado uno) que
muestra información sobre la función que representa la zona activa. La zona activa suele ser un botón, por ejemplo, Tecla
programable 1. La información sobre herramientas muestra el nombre del botón tal como se especificó en el elemento
ToolTip del archivo de definición de máscara.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para exponer la información sobre herramientas en la máscara


1. En una etiqueta de botón del archivo de definición de máscara, asigne un valor de color a mappingColor.
El ejemplo siguiente está tomado del archivo de definición de máscara de Pocket PC 2003:

<button
toolTip="Soft Key 1"
onClick="DOWN:0x5b 0x70 UP:0x5b"
mappingColor="0xF26C4F"
/>

2. Asigne una cadena de texto a toolTip.


Si sitúa el cursor sobre el botón que tiene el color 0xF26C4F, se muestra información sobre herramientas con la tecla
programable de texto 1.

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Utilizar máscaras con el emulador de dispositivos


Microsoft Device Emulator proporciona un cuadro de diálogo para seleccionar un archivo de definición de máscara y también
proporciona opciones de máscara si se inicia desde la línea de comandos.
La interfaz gráfica para seleccionar un Archivo de definición de máscara para el emulador está disponible en la ficha Mostrar
del cuadro de diálogo Propiedades del emulador.
Algunas opciones sólo están disponibles cuando el emulador de dispositivos se inicia desde la línea de comandos. Para
obtener más información, haga clic en Ayuda en el emulador de dispositivos.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para abrir el emulador de dispositivos


1. En el menú Herramientas de Visual Studio, haga clic en Conectar con dispositivo.
2. En el cuadro de diálogo Conectar con dispositivo, seleccione un emulador y, a continuación, haga clic en Conectar.
Para abrir el cuadro de diálogo Propiedades del emulador desde el emulador de dispositivos
En el menú Archivo del emulador de dispositivos, haga clic en Configurar y, a continuación, haga clic en la ficha
Mostrar.
Para abrir el cuadro de diálogo Propiedades del emulador desde Visual Studio 2005
1. En el menú Herramientas de Visual Studio, haga clic en Opciones.
2. Expanda el nodo Herramientas de dispositivo y, a continuación, haga clic en Dispositivos.
3. En el cuadro Dispositivos, seleccione un emulador y, a continuación, haga clic en Propiedades.
4. En el cuadro de diálogo Propiedades del emulador <NombreEmulador>, haga clic en Opciones del emulador y, a
continuación, haga clic en la ficha Mostrar.
Para aplicar una máscara al emulador de dispositivos
Utilice el cuadro Máscara en la ficha Mostrar en el cuadro de diálogo Propiedades del emulador.
O bien,
Utilice el modificador /skin cuando inicie el emulador desde la línea de comandos.
O bien,
Aplique una máscara que haya guardado anteriormente con una imagen de SO del emulador iniciándola desde la línea
de comandos con el modificador /s.
Para guardar un archivo de máscara con una imagen de SO del emulador
En el menú Archivo del emulador de dispositivos, haga clic en Guardar estado y Salir.
Se genera un archivo de estado guardado, incluida la máscara, y se guarda. Para obtener más información, consulte el
tema Archivos de estado guardado en el sistema de Ayuda del emulador.
Mostrar u ocultar la información sobre herramientas
En la ficha Mostrar del cuadro de diálogo Propiedades del emulador, active o desactive la opción Habilitar
información sobre herramientas.
Nota
La opción de mostrar la información sobre herramientas sólo está disponible cuando se ha especificado en el archivo d
e definición de máscara.

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Cómo: Utilizar máscaras con Visual Studio 2005 (dispositivos)


Visual Studio 2005 ofrece a varios elementos de interfaz de usuario para ayudarle a administrar las máscaras en los
diseñadores (excepto las ediciones Express). Estas características se encuentran normalmente en los cuadros de diálogo
Opciones de factores de forma y Propiedades del factor de forma.
Nota
Para mayor comodidad, puede utilizar el entrono de Visual Studio para obtener acceso a las propiedades de máscara del em
ulador además de los diseñadores Visual Studio sin tener que abrir el emulador de dispositivos. Para obtener más informaci
ón, consulte la sección "Acceso a las propiedades de máscara del emulador de dispositivos".

Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para abrir el cuadro de diálogo Opciones de factores de forma


1. En el menú Herramientas de Visual Studio, haga clic en Opciones.
2. Expanda Herramientas de dispositivo y, a continuación, haga clic en Factores de forma.

Para abrir el cuadro de diálogo Propiedades del factor de forma


En el cuadro de diálogo Opciones de factores de forma, seleccione un Factor de forma y, a continuación, haga clic en
Propiedades.
Para seleccionar una máscara para el diseñador
1. En el cuadro de diálogo Propiedades del factor de forma, use el cuadro Máscara para seleccionar el archivo XML que
representa el archivo de definición de máscara que desea utilizar en el diseñador.
Una representación gráfica de la máscara aparece en el panel a la izquierda del cuadro Máscara.
2. Haga clic en Aceptar para volver al cuadro de diálogo Opciones de factores de forma.
3. Haga clic en Guardar como para almacenar esta nueva organización bajo un nuevo nombre.
El factor de forma recién creado incluye la máscara personalizada.
Nota
Si tiene un proyecto abierto, necesita cerrar el formulario y volver a abrirlo para que el cambio surta efecto.

Establecer una máscara concreta como la máscara predeterminada


En el cuadro de diálogo Opciones de factores de forma, use el cuadro Factor de forma predeterminado para
seleccionar el factor de forma que desea establecer como predeterminado.
El valor seleccionado se convertirá en el factor de forma predeterminado para los nuevos proyectos.
Nota
Sólo se puede establecer este valor predeterminado si hay un proyecto abierto.

Para habilitar la compatibilidad de la rotación


En el cuadro de diálogo Propiedades del factor de forma, seleccione Habilitar compatibilidad de rotación.
Para establecer la resolución horizontal y vertical
En el cuadro de diálogo Propiedades del factor de forma, especifique los valores de la resolución horizontal y vertical
en píxeles por pulgada.
Ocultar o mostrar la máscara
En el cuadro de diálogo Propiedades del factor de forma, active o desactive la opción Mostrar máscara.
Si selecciona Mostrar máscara, la máscara determina el alto, el ancho y los colores del monitor, por lo que estas
propiedades aparecerán atenuadas y no se podrán cambiar.
Para establecer el alto y ancho del área de visualización
En el cuadro de diálogo Propiedades del factor de forma, utilice los cuadros Ancho de la pantalla y Alto de la
pantalla para especificar los valores del número de píxeles.
Si selecciona Mostrar máscara, la máscara establece estas propiedades, por lo que parecen atenuadas y no se pueden
cambiar.
Para establecer los colores del monitor
En el cuadro de diálogo Propiedades del factor de forma, utilice el cuadro Colores del monitor para seleccionar el
número de bits por píxel.
Si ha seleccionado Mostrar máscara, la máscara establece esta propiedad, por lo que parece atenuada y no se puede
cambiar.

Ocultar la información sobre herramientas


Quite los elementos ToolTip del archivo de definición de máscara.
Nota
Visual Studio no proporciona ninguna opción de interfaz de usuario para ocultar la información sobre herramientas si
el archivo de definición de máscara ya lo ha definido. Hay que diferenciar entre este comportamiento de información s
obre herramientas del de las máscaras que se aplican al emulador de dispositivos, en las que los elementos ToolTip pu
eden estar habilitados o deshabilitados. Para obtener más información, vea Cómo: Utilizar máscaras con el emulador d
e dispositivos.

Para tener acceso a las propiedades de máscara del emulador de dispositivos


1. En el menú Herramientas de Visual Studio, haga clic en Opciones.
2. Expanda el nodo Herramientas de dispositivo y, a continuación, haga clic en Dispositivos.
3. En el cuadro Dispositivos, seleccione un emulador y, a continuación, haga clic en Propiedades.
4. En el cuadro de diálogo Propiedades del emulador <NombreEmulador>, haga clic en Opciones del emulador y, a
continuación, seleccione la ficha Mostrar.
Éste es el mismo cuadro de diálogo que aparece cuando se hace clic en Configurar en el menú Archivo del emulador de
dispositivos. Para obtener más información, vea Cómo: Utilizar máscaras con el emulador de dispositivos.

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Detalles de un archivo de definición de máscara (dispositivos)


La tabla siguiente describe elementos de ejemplo y valores para una archivo de definición de máscara para dispositivos. Para
obtener más información, vea Ejemplo de archivo de definición de máscara (dispositivos).
Elementos
Elementos y et Descripción
iquetas XML
Etiqueta <skin> Encapsula el esquema de una máscara de emulador. Sólo se puede utilizar una etiqueta <skin> en cada archi
vo XML.

Etiqueta <view> Contiene el esquema de una máscara del emulador. Sólo puede utilizar una etiqueta <view> por cada etiquet
a <skin>.

Elemento de la Especifica el título de la ventana del emulador.


barra de título t
itleBar ="My E
mulator skin"

Elementos disp Especifica la posición dentro de la ventana de la máscara del emulador en la que ubicar la ventana que contie
layPosX="10" y ne el área de presentación del emulador . Para que el área de presentación no sea visible, seleccione coorden
displayPosY="1 adas fuera de la pantalla.
49"

Elementos disp Especifica el ancho y alto del área de presentación del emulador. Para el ancho, elija un entero entre 80 y 102
layWidth="272" 4 que sea divisible por 8. Para el alto, elija un entero entre 64 y 768.
y displayHeigh
t="224"

Elemento displ Especifica la profundidad de color del área de presentación del emulador. Para la profundidad de color, elija 8
ayDepth="8" , 16 ó 32.

Elemento norma Especifica el archivo de imágenes normal de la máscara del emulador, que es obligatorio. El archivo de imáge
lImage="up.bmp nes normal indica el tamaño de la ventana y el aspecto de la máscara del emulador.
"

Elemento mappi Especifica el archivo de asignación para la máscara del emulador. El archivo de asignación es un archivo opci
ngImage="map.b onal que define las regiones ocupadas por los botones en la máscara del emulador.
mp"

Elemento downI Especifica el archivo de imagen correspondiente a un botón presionado para la máscara del emulador. El arch
mage="down.bmp ivo de imagen de botón presionado es un archivo opcional que especifica el aspecto que adoptan los botones
"
de la máscara del emulador al presionarlos.

Etiqueta <butto Contiene la descripción de un botón en la máscara del emulador.


n>

Elemento mappi Especifica en el archivo de asignación el color RGB que se va a utilizar para el botón. Todos los píxeles que tie
ngColor="0x00F nen este color en la imagen de asignación representan el área de la máscara del emulador en la que es posibl
F00"
e hacer clic para este botón en particular. Esta área se comporta como una máscara a través de la cual, al pres
ionar el botón en cuestión, se muestra el archivo de imagen de botón presionado.

Elemento toolT Opcional. Especifica el texto que aparecerá al situar el puntero sobre el botón.
ip="This is my
ToolTip."
onClick=" DOWN Opcional. Especifica las teclas del teclado que pasaran como presionadas al motor cuando se presione un bot
:Key_LeftShift
ón. Utilice valores enteros o hexadecimales que correspondan a un código de exploración de teclado sin form
Key_Z ato ("raw keyboard scan code").
0x00000015
UP: Key_LeftSh
ift
Key_A"

<button Especifica los eventos de teclado que se van a repetir mientras se presiona un botón en la máscara del emula
toolTip="Soft dor. Si se especifica KeyEvent, el diseñador genera el código del botón. Si se especifica Comment, se agrega al c
Key 1" ódigo generado en forma de comentario. Se utiliza información sobre herramientas a modo de comentario d
onPressAndHold e forma predeterminada.
="0x3B"
Esta característica admite todos los códigos de tecla excepto SHUTDOWN.
mappingColor="
0xF26C4F"
KeyEvent="F1"
Comment="Not h
andled when me
nu
is present."

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Ejemplo de archivo de definición de máscara (dispositivos)


El código que se muestra a continuación es el archivo de definición de máscara PocketPC_2003_Skin.xml para la máscara de
Pocket PC 2003 en formato vertical. Visual Studio 2005 instala este archivo y otros archivos de máscara de forma
predeterminada en \Archivos de programa\Microsoft Visual Studio 8\SmartDevices\Skins (excepto las versiones Express).
Puede utilizar los mismos archivos de máscara para el emulador de dispositivos y para los diseñadores Visual Studio. Para
obtener más información, vea Detalles de un archivo de definición de máscara (dispositivos).
Código
<?xml version="1.0" encoding="UTF-8" ?>
<skin>
<view
titleBar ="Pocket PC 2003 Second Edition"
displayPosX="51"
displayPosY="47"
displayWidth="240"
displayHeight="320"
displayDepth="16"
mappingImage="PocketPC_2003_Mask.png"
normalImage="PocketPC_2003_Up.png"
downImage= "PocketPC_2003_Down.png">
<button
toolTip="Power"
onPressAndHold="0x75"
mappingColor="0xED145B"
/>
<button
toolTip="Record"
onPressAndHold="0x44"
mappingColor="0xF5989D"
/>
<button
toolTip="Rocker Up"
onPressAndHold="0x48"
mappingColor="0x0072BC"
KeyEvent="Up"
/>
<button
toolTip="Rocker Down"
onPressAndHold="0x50"
mappingColor="0x605CA8"
KeyEvent="Down"
/>
<button
toolTip="Soft Key 1"
onClick="DOWN:0x5b 0x70 UP:0x5b"
mappingColor="0xF26C4F"
/>
<button
toolTip="Soft Key 2"
onClick="DOWN:0x5b 0x71 UP:0x5b"
mappingColor="0xF68E56"
/>
<button
toolTip="Soft Key 3"
onClick="DOWN:0x5b 0x72 UP:0x5b"
mappingColor="0xFBAF5D"
/>
<button
toolTip="Soft Key 4"
onClick="DOWN:0x5b 0x73 UP:0x5b"
mappingColor="0xF7941D"
/>
<button
toolTip="Up"
onPressAndHold="0x48"
mappingColor="0x39B54A"
KeyEvent="Up"
/>
<button
toolTip="Down"
onPressAndHold="0x50"
mappingColor="0x009900"
KeyEvent="Down"
/>
<button
toolTip="Left"
onPressAndHold="0x4B"
mappingColor="0x66CC66"
KeyEvent="Left"
/>
<button
toolTip="Right"
onPressAndHold="0x4D"
mappingColor="0x00CC00"
KeyEvent="Right"
/>
<button
toolTip="Enter"
onClick="0x1C"
mappingColor="0x006600"
KeyEvent="Return"
/>
</view>
</skin>

Vea también
Otros recursos
Personalizar máscaras (dispositivos)
Desarrollo para Smart Device

Conectar Smart Devices a equipos de desarrollo


Los temas de esta sección explican cómo establecer una conexión segura y confiable entre el equipo de desarrollo y el
dispositivo de destino (en caso de que el dispositivo o el emulador sea real).
En esta sección
Selección del método de conexión
Describe varios métodos de conexión.
Cómo: Establecer opciones de conexión (dispositivos)
Describe cómo cambiar los valores de configuración de conexión predeterminados.
Cómo: Conectar a un dispositivo basado en Windows CE sin ActiveSync
Describe los pasos para establecer una conexión cuando ActiveSync no está disponible para admitir la conexión.
Cómo: Conectar mediante Bluetooth
Describe los pasos para establecer una conexión Bluetooth.
Cómo: Conectar mediante IR
Describe los pasos para establecer una conexión IR.
Cómo: Conectar al emulador de dispositivos en una sesión de Virtual PC
Muestra cómo conectar el equipo de desarrollo a un emulador que se ejecuta en una sesión VPC.
Cómo: Obtener acceso al sistema de archivos del emulador de Smartphone
Describe los pasos para obtener acceso al sistema de archivos del emulador Smartphone, que no cuenta con ningún
Explorador de archivos.
Cómo: Obtener acceso a los archivos del equipo de desarrollo desde el emulador
Describe cómo utilizar carpetas compartidas para mover archivos entre el emulador y el equipo de desarrollo.
Solucionar problemas de conectividad (dispositivos)
Describe aspectos que interfieren con las propias conexiones y cómo resolverlos.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Mobile Developer Center
Desarrollo para Smart Device

Selección del método de conexión


Durante el desarrollo, es fundamental contar con una conexión rápida y estable entre la aplicación Smart Device y el equipo de
desarrollo. Aunque los emuladores Smart Device se pueden utilizar en la mayoría de las fases de desarrollo, es fundamental
para el ciclo de desarrollo que se haya comprobado la aplicación en un hardware real.
Se encuentran disponibles varias opciones de conexión, tal y como se resume a continuación en este artículo. Las
configuraciones más comunes son:
Conexión con el emulador de dispositivos utilizando el transporte DMA. Este transporte elimina los problemas de
conexión relacionados con la red y, normalmente, se distribuye como transporte predeterminado. A menos que exista
alguna razón importante para utilizar otro transporte, siempre se debe utilizar el transporte DMA para el emulador de
dispositivos.
Conexión con un dispositivo físico utilizando ActiveSync 4.x y un puerto USB.
Es posible obtener acceso a éstas y otras opciones que aparecen en el menú Herramientas de Visual Studio. Para obtener más
información, vea Cómo: Establecer opciones de conexión (dispositivos).
ActiveSync 4.x
ActiveSync 4.x proporciona una conexión segura entre el equipo de desarrollo y un dispositivo utilizando cable, soporte de
conexión, Bluetooth o conexiones de infrarrojos. También proporciona el vehículo mediante el cual se descargan en el
dispositivo los archivos de seguridad y los archivos de conexión necesarios. Cuando se proporciona soporte a un dispositivo,
ActiveSync desactiva todas las otras tarjetas de red, de manera que es posible saber que el dispositivo en cuestión sólo se está
comunicando con el equipo de desarrollo. ActiveSync es el mecanismo de conexión estándar mientras que el usuario
desarrolla la correspondiente aplicación de dispositivos.
Si la compatibilidad de ActiveSync no está disponible para el dispositivo en cuestión, vea Cómo: Conectar a un dispositivo
basado en Windows CE sin ActiveSync.
Opciones de conexión
El hardware basado en Pocket PC, Smartphone y Windows CE suele ofrecer diferentes formas a la hora de establecer vínculos
entre un dispositivo y un equipo determinado. En esta sección, se explican las diferentes opciones de conexión junto con sus
correspondientes ventajas y desventajas.
Dependiendo del dispositivo de hardware implicado, se pueden emplear uno o más de los siguientes métodos de conexión.
Conexión USB
El formulario de conexión más sencillo junto con todos los dispositivos de Pocket PC y Smartphone admiten una conexión
USB. Aunque no tan rápida como una conexión Ethernet o inalámbrica 802.11b/g, la simplicidad de la conexión USB se
presenta como una opción atractiva. Muchos dispositivos también se verán potenciados mediante el puerto USB, que es una
ventaja adicional.
Red Ethernet cableada
Los dispositivos de Pocket PC y Smartphone no admiten, de manera predeterminada, conexiones Ethernet sin hardware
adicional. Sin embargo, la velocidad adicional de este estándar de conexión la convierten en la forma preferida a la hora de
realizar operaciones de depuración, así como otras que requieran grandes cantidades de datos.
Red inalámbrica 802.11b/g
Las tarjetas de la red inalámbrica están disponibles para Pocket PC y, actualmente, existen varios modelos con conexión de
red inalámbrica como característica integral. La conexión de red inalámbrica es tan rápida como una conexión de red
Ethernet por cable.
Bluetooth
Muchos dispositivos de Pocket PC y Smartphone cuentan con la característica de conexión de red inalámbrica Bluetooth. Una
vez emparejados, Smart Device puede conectarse mediante ActiveSync mientras éste se encuentre dentro del alcance del
equipo de escritorio. Bluetooth no es tan rápido como la conexión inalámbrica de 802.11b/g y no se recomienda para tareas
de depuración.
Conexión serie
Si no hay ninguna opción disponible de conexión de red inalámbrica o por cable, un puerto serie es una forma aceptable,
aunque lenta, de establecer conexión entre una aplicación Smart Device y un equipo de desarrollo.
Conexiones mediante infrarrojos
Las conexiones mediante infrarrojos no requieren ningún cableado adicional y tanto los dispositivos Pocket PC como
Smartphone se suministran con puertos IrDA de forma estándar. Sin embargo, las conexiones mediante infrarrojos
requieren línea de vista para funcionar con fiabilidad e incluso el rendimiento no es aceptable para realizar tareas de
depuración. Sin embargo, IrDA puede ser útil como una última técnica de recurso para copiar los archivos en dispositivos.
Vea también
Tareas
Solucionar problemas de conectividad (dispositivos)
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Establecer opciones de conexión (dispositivos)


Visual Studio 2005 proporciona numerosas opciones para conectar el equipo de desarrollo con un dispositivo. Utilice el cuadro
de diálogo Propiedades de dispositivo para administrar estas conexiones.
Visual Studio se distribuye con conexiones de emulador cuyo valor predeterminado es Transporte DMA y dispositivos físicos
cuyo valor predeterminado es TCP/IP.
Para establecer las opciones de conexión
1. En el menú Herramientas de Visual Studio, haga clic en Opciones.
2. Expanda Herramientas de dispositivo, haga clic en Dispositivos, seleccione un dispositivo o un emulador y, a
continuación, haga clic en Propiedades.
Utilice los cuadros de diálogo asociados para seleccionar y configurar las conexiones.
Vea también
Referencia
Propiedades de dispositivo (Cuadro de diálogo)
Conceptos
Selección del método de conexión
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Conectar a un dispositivo basado en Windows CE sin


ActiveSync
Si ActiveSync no está disponible, Visual Studio 2005 no copia automáticamente los archivos de conectividad necesarios en el
dispositivo. Utilice los pasos siguientes para instalar estos archivos en el dispositivo, modifique la configuración de conexión de
Visual Studio y establezca la seguridad del dispositivo.
Los primeros dos pasos, preparar el dispositivo y Visual Studio, sólo tienen que hacerse una vez. Los dos últimos pasos,
configurar la seguridad y establecer la conexión, deben repetirse cada vez que se desee conectar desde una nueva instancia de
Visual Studio.
Preparar el dispositivo para la conexión
1. Utilizando cualquier tipo de conexión, copie los siguientes archivos en la carpeta \Windows\ del dispositivo. Estos
archivos se encuentran de manera predeterminada en la ubicación \Archivos de programa\Archivos comunes\Microsoft
Shared\CoreCon\1.0\Target\wce400\<CPU> del equipo de desarrollo.
Clientshutdown.exe
ConmanClient2.exe
CMaccept.exe
eDbgTL.dll
TcpConnectionA.dll
2. Desde el símbolo del sistema del dispositivo, ejecute conmanclient2.exe.
3. Determine la dirección IP del dispositivo.
Para preparar Visual Studio para conectar
1. En el menú Herramientas de Visual Studio, haga clic en Opciones, haga clic Herramientas de dispositivo y, a
continuación, haga clic en Dispositivos.
2. Seleccione Dispositivo Windows CE y, a continuación, haga clic en Propiedades.
3. A la derecha del cuadro Transporte, haga clic en Configurar.
4. En el cuadro de diálogo Configurar transporte TCP/IP, seleccione Usar una dirección IP específicay, a continuación,
escriba la dirección IP del dispositivo.
5. Cierre los cuadros de diálogo.
Puede que aparezca un cuadro de mensaje solicitándole que reinicie el dispositivo. En ese caso, una reinicialización
parcial es suficiente.
Para configurar la seguridad y establecer la conexión
1. En el símbolo del sistema del dispositivo, ejecute cMaccept.exe.
2. Conecte con el dispositivo en menos de tres minutos.
Si establece la primera conexión dentro del intervalo de tres minutos, puede seguir implementando y depurando
indefinidamente siempre que esté utilizando la misma instancia de Visual Studio. Si necesita conectarse desde otra
instancia de Visual Studio, necesita volver a realizar los pasos de seguridad.
Nota de seguridad
Puede eliminar el paso del cMaccept deshabilitando la seguridad en el dispositivo. Para ello, utilice el Editor de Registro
remoto con el fin de establecer el valor de DWORD HLKM\System\CoreConOverrideSecurity = 1. Al deshabilitar la seg
uridad, el dispositivo quedará expuesto a ataques malintencionados, por lo que no se recomienda hacerlo a menos que
se disponga de los métodos de protección adecuados.
Vea también
Conceptos
Herramientas remotas para proyectos de dispositivos
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Conectar mediante Bluetooth


Los pasos siguientes describen cómo conectar un dispositivo al equipo de desarrollo utilizando Bluetooth. Para completar el
proceso, debe tener instalado ActiveSync 4.0 o posterior.
Para conectar utilizando Bluetooth
1. En el equipo de desarrollo, asegúrese de que la antena Bluetooth está correctamente insertada e instalada.
2. En el cuadro de diálogo de propiedades de Bluetooth del equipo de desarrollo, cambie la opción de descubrimiento a
Activado.
3. En el dispositivo, puntee el icono de Bluetooth y, a continuación, puntee Activar Bluetooth.
4. Puntee Administrador de Bluetooth.
5. En el menú de ventana de Bluetooth, haga clic en Nuevo para iniciar una búsqueda de dispositivos habilitados para
Bluetooth.
6. Seleccione el equipo de desarrollo al que desea conectar utilizando ActiveSync.
7. Cuando se le pida, escriba una clave de paso temporal y, a continuación, escriba rápidamente la clave en el equipo de
desarrollo.
Ahora tiene una conexión Bluetooth a su dispositivo. Para configurar ActiveSync, cree un puerto COM virtual para esta
conexión Bluetooth. Siga los pasos que se detallan a continuación.
Para configurar ActiveSync
1. En el equipo de escritorio, entre en la configuración de Bluetooth y agregue un puerto COM de entrada para la conexión
Bluetooth.
2. En ActiveSync, abra el cuadro de diálogo Configuración de la conexión y, a continuación, seleccione Permitir
conexiones a uno de los siguientes.
3. Seleccione el puerto COM del dispositivo Bluetooth y, a continuación, haga clic en Aceptar.
4. En el dispositivo, inicie ActiveSync.
5. En el menú de ActiveSync, puntee Conectarse mediante Bluetooth.
Ahora debería tener una conexión de ActiveSync.

Vea también
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Conectar mediante IR


Los pasos siguientes describen cómo conectar un dispositivo al equipo de desarrollo utilizando un puerto de infrarrojos (IR).
Para completar el proceso, debe tener instalado ActiveSync 4.0 o posterior.
Para preparar el equipo de desarrollo
1. En el equipo de desarrollo, abra Microsoft ActiveSync.
2. En el menú Archivo de ActiveSync, haga clic en Configuración de conexión.
3. Seleccione Permitir conexiones a uno de los siguientes.
4. Seleccione Puerto de infrarrojos (IR) y, a continuación, haga clic en Aceptar.

Para configurar el dispositivo


1. Asegúrese de que el puerto IR del dispositivo está señalando al puerto IR del equipo de desarrollo y de que está dentro
de un intervalo válido.
2. En el dispositivo, abra ActiveSync.
3. En el menú Herramientas de ActiveSync, puntee Conectar mediante infrarrojos.
Se establece la conexión.
Vea también
Tareas
Solucionar problemas de conectividad (dispositivos)
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Conectar al emulador de dispositivos en una sesión de


Virtual PC
No se puede utilizar TCP/IP para conectarse al emulador de dispositivos durante una sesión de Virtual PC (VPC) debido a que
VPC no admite el controlador Virtual Network Switch. El emulador necesita este controlador para una conexión TCP/IP. En su
lugar, siga los pasos que se detallan a continuación.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para conectarse al emulador durante una sesión de Virtual PC


1. Instale Microsoft ActiveSync 4.x en la imagen Virtual PC.
2. En el menú Archivo de ActiveSync, haga clic en Configuración de conexión.
3. En el cuadro de diálogo Configuración de conexión, cambie el transporte de conexión a DMA.
4. Inicie el emulador.
5. En el menú Herramientas de Visual Studio, haga clic en Administrador de emuladores de dispositivos.
6. En el cuadro Emuladores disponibles, haga clic con el botón secundario del mouse en el emulador deseado y, a
continuación, haga clic en Colocar en la base en el menú contextual.
7. Para establecer una sociedad, siga las instrucciones que aparecen en el asistente ActiveSync.
Vea también
Tareas
Cómo: Iniciar el emulador de dispositivos en Visual Studio
Otros recursos
Introducción a los proyectos para Smart Device
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Obtener acceso al sistema de archivos del emulador de


Smartphone
El emulador de Smartphone no tiene ningún explorador de archivos. Utilice la técnica siguiente para tener acceso al sistema de
archivos de Smartphone. Para completar el proceso, debe tener instalado ActiveSync 4.0 o posterior.
Antes de intentar utilizar ActiveSync con un emulador, asegúrese de que no hay ningún dispositivo conectado al equipo de
escritorio y de que las conexiones USB estén deshabilitadas en ActiveSync.
Nota
Si se cierra el Administrador del emulador de dispositivos o el emulador una vez finalizados los pasos siguientes, también se
cerrará la conexión ActiveSync.

Para tener acceso al sistema de archivos del emulador de Smartphone


1. En el menú Herramientas de Visual Studio, haga clic en Administrador del emulador de dispositivos.
2. En el cuadro Emuladores disponibles, seleccione el emulador a cuyo sistema de archivos desee tener acceso.
3. En el menú Acciones del Administrador del emulador de dispositivos, haga clic en Conectar.
Junto al emulador seleccionado, aparecerá un icono que indica que se ha realizado una conexión.
4. Haga clic con el botón secundario del mouse en el emulador seleccionado y, a continuación, haga clic en Colocar en la
base.
El icono cambia para mostrar que el emulador se ha colocado en la base.
5. Abra ActiveSync.
6. En el menú Archivo de ActiveSync, haga clic en Configuración de conexión.
7. Active la casilla de verificación Permitir conexiones a uno de los siguientes.
8. Seleccione DMA en la lista de puertos y, a continuación, haga clic en Aceptar.
ActiveSync iniciará una asociación con el emulador. Siga las instrucciones del Asistente para nueva asociación.
Nota
Si no se inicia automáticamente ninguna asociación, haga clic en Conectar en el cuadro de diálogo Configuración de
conexión y, a continuación, siga las instrucciones del Asistente para conectarse.

9. Una vez realizados los pasos para la asociación de ActiveSync, haga clic en Explorar en la barra de herramientas de
ActiveSync para obtener acceso al sistema de archivos del emulador de Smartphone.
Nota
Cuando desee usar un emulador conectado a Visual Studio utilizando ActiveSync, utilice el destino del dispositivo, no el
del emulador, de la plataforma correspondiente.

Vea también
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Cómo: Obtener acceso a los archivos del equipo de desarrollo


desde el emulador
Los pasos siguientes muestran cómo utilizar carpetas compartidas para obtener acceso a los archivos del equipo de desarrollo
desde el emulador de dispositivos.
Nota
Los emuladores de Smartphone no suelen tener visores de archivos, así que en los distintos pasos de la prueba de Smartpho
ne que se describen a continuación, se utiliza el Visor de archivos remoto. Para obtener más información, consulte Visor de a
rchivos remoto.

Preparar una carpeta compartida


1. En el equipo de desarrollo, cree una carpeta compartida entre el equipo de desarrollo y el emulador de dispositivos.
2. En el menú Archivodel emulador de dispositivos, haga clic en Configurar.
3. En el cuadro Carpeta compartida de la ficha General, escriba o desplácese a la carpeta compartida del equipo de
desarrollo.
4. Haga clic en Aceptar.
Para probar la carpeta compartida en el emulador de Pocket PC
1. En el emulador de Pocket PC, abra el Explorador de archivos.
2. Puntee y seleccione Mi dispositivo.
La entrada Tarjeta de almacenamiento se encuentra en la carpeta compartida.

Para probar la carpeta compartida en el emulador de Smartphone


1. En el menú Inicio de Windows, seleccione Todos los programas; a continuación, seleccione Microsoft Visual Studio
2005, Herramientas remotas de Visual Studio y después haga clic en Visor de archivos remoto.
2. En Seleccionar un dispositivo Windows CE, seleccione el emulador de Smartphone y, a continuación, haga clic en
Aceptar para abrir la ventana Visor de archivos remoto de Windows CE.
La entrada Tarjeta de almacenamiento se encuentra en la carpeta compartida.
Vea también
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Solucionar problemas de conectividad (dispositivos)


La mayoría de los problemas de conectividad entre el equipo de desarrollo y un dispositivo se deben a problemas de
seguridad o de red. En los párrafos siguientes se explica cómo identificar y resolver algunos de los problemas de conexión más
comunes y se dan instrucciones para establecer conexiones confiables y seguras.
Establecer una conexión con el emulador de dispositivos
Utilice el transporte DMA que Visual Studio 2005 proporciona para conectar al emulador de dispositivos. Este transporte
elimina virtualmente todos los problemas de conexión entre el equipo de desarrollo y el emulador.
Importante
Utilice el transporte TCP/IP sólo si tiene alguna razón concreta seria. Para resolver los problemas que surgen del uso de TCP/
IP con el emulador, revise los pasos que siguen. Para obtener más información, visite Mobile Developer Center.

Error al abrir el controlador de modificador virtual


Si se intenta conectar el emulador de dispositivos a una red utilizando las tarjetas NE2000 o CS8900 emuladas, se necesita un
controlador de modificador virtual. Se puede descargar un controlador en Mobile Developer Center.
Puede producirse un error de apertura del controlador por varias razones, entre las que se incluyen:
Ausencia de controlador.
La tarjeta de red del equipo de desarrollo no tiene instalado el controlador.
Ha habido problemas durante la instalación del controlador.
El controlador está en estado deshabilitado.
El equipo de desarrollo no tiene una tarjeta de red.
Realice los pasos siguientes para diagnosticar la causa precisa.
Para diagnosticar la causa precisa del error
1. Busque en la ficha Red del cuadro de diálogo Propiedades del emulador.
Si las tarjetas NE2000 y/o CS8900 están habilitadas, compruebe que las tarjetas de red a las que están enlazadas están
presentes y conectadas. Para abrir el cuadro de diálogo Propiedades del emulador, haga clic en Configurar en el
menú Archivo del emulador.
2. Examine las propiedades de red del adaptador para comprobar si el elemento Servicios de red del equipo virtual está
presente y habilitado, y su versión es la correcta, es decir, 2.6.465.224 o posterior.
3. Si la realización de estos pasos no logra solucionar el problema, reinstale el controlador.
Error de implementación en el emulador
Si su equipo de desarrollo dispone de una conexión de red inalámbrica y está utilizando el transporte TCP, puede que necesite
pasos adicionales, como instalar el Adaptador de bucle invertido de Microsoft. Para obtener más información, visite Mobile
Developer Center.
Nota
A menos que tenga alguna razón poderosa para utilizar el transporte TCP, utilice el transporte DMA para evitar problemas de
red.

No se puede depurar después de cambiar de transporte


Es posible cambiar el transporte del emulador, aunque el emulador no puede vincularse al nuevo transporte hasta que se
restablezca el software del dispositivo.
Nota
El transporte DMA es el transporte recomendado para el emulador de dispositivos. Utilice el transporte de TCP/IP sólo si tien
e una razón poderosa para hacerlo.

Para cambiar de transporte


1. En el menú Herramientas de Visual Studio, haga clic en Opciones, haga clic Herramientas de dispositivo y, a
continuación, haga clic en Dispositivos.
2. Seleccione un emulador y, a continuación, haga clic en Propiedades.
3. En el cuadro Transporte, seleccione otro transporte.
Si va a cambiar a TCP/IP, haga clic en Configurar para seleccionar las opciones adicionales.
4. Haga clic en Aceptar para cerrar los cuadro de diálogo.
No se puede establecer una conexión con el emulador mientras se ejecuta una sesión de PC virtual
Puede evitar este problema de conexión utilizando el transporte DMA para el emulador. Para obtener más información, vea
Cómo: Conectar al emulador de dispositivos en una sesión de Virtual PC.
Reparar la instalación del emulador de dispositivos
Los errores que indican un error para conectarse al emulador de dispositivos no suelen ser errores de instalación. Sin
embargo, puede utilizar los pasos siguientes para reparar la instalación del emulador de dispositivos. Para ello, necesita los
discos de instalación originales. Al reparar su instalación de Visual Studio 2005, no se repara instalación del emulador de
dispositivos.
Para reparar la instalación del emulador de dispositivos
1. Desplácese a wcu\ARM en el disco de instalación original de Visual Studio 2005.
La ubicación de esta carpeta, en Disco 1, Disco 2, etc., varía según la edición de Visual Studio que se utilice.
2. Haga doble clic en vs_emulator.exe para abrir el Asistente para configuración de emuladores de dispositivos y, a
continuación, siga las instrucciones.
Sugerencias adicionales
El sistema de Ayuda independiente del emulador de dispositivos ofrece sugerencias adicionales. Para obtener más
información, haga clic en el menú Ayuda del emulador de dispositivos y busque "Solución de problemas de conexión" en las
fichas Contenido o Índice.
Conectar a dispositivos físicos
Falte de certificados apropiados en el dispositivo
Algunos dispositivos, incluso Smartphone 2003 y versiones posteriores, requieren certificados para su instalación en
dispositivos por motivos de seguridad. Los certificados para trabajo de desarrollo diario se incluyen en Visual Studio 2005
junto con una herramienta instalarlos.
Para instalar los certificados necesarios
1. Conéctese al dispositivo utilizando cualquier mecanismo de conexión disponible.
2. Copie SDKCERTS.cab del equipo de desarrollo al dispositivo.
El archivo SDKCERTS.cab está ubicado de manera predeterminada en \Archivos de programa\Microsoft Visual Studio
8\SmartDevices\SDK\SDKTools.
3. En el dispositivo, abra sdkcerts.cab para instalar los certificados.
Falta de preparación del dispositivo de Windows CE 5.0
Los dispositivos de Windows CE 5.0 no compatibles con ActiveSync necesitan unos pasos de preparación para poder
establecer una conexión con una instancia de Visual Studio. Para obtener más información, vea Cómo: Conectar a un
dispositivo basado en Windows CE sin ActiveSync.
Comportamiento inesperado durante la implementación
Si el equipo de desarrollo está conectado a un dispositivo a través de ActiveSync y el usuario intenta establecer una conexión
TCP/IP con, por ejemplo, un dispositivo de Windows CE, y se produce un error en la conexión, el equipo de desarrollo se
conecta al dispositivo conectado a ActiveSync y no avisa de que se ha producido un error en la conexión TCP/IP.
Conexiones inalámbricas
Aunque Visual Studio 2005 admite el uso de la tecnología inalámbrica para la conexión con dispositivos, ésta presenta una
serie de factores adicionales que pueden afectar de modo adverso al establecimiento de una conexión correcta y estable. Entre
estos factores se encuentran la desalineación de puertos IR, la obstrucción o degradación de la señal en las conexiones RF, etc.
Vea también
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

Programación para dispositivos con .NET Compact Framework


En esta sección se proporciona información sobre el desarrollo de aplicaciones de dispositivos inteligentes utilizando el
lenguaje de Visual Basic o C# junto con .NET Compact Framework.
En esta sección
Lo nuevo en proyectos para dispositivos administrados
Enumera los cambios más importantes desde Visual Basic .NET 2003.
Diferencias respecto al desarrollo para escritorio en .NET Compact Framework
Describe las diferencias con el desarrollo de las aplicaciones de escritorio.
Variaciones en las versiones de .NET Compact Framework
Describe las distintas versiones de .NET Compact Framework (incluidos los Service Pack).
Diferencias entre controles de Pocket PC 2003 y Smartphone 2003
Presenta una tabla que muestra los controles admitidos para el desarrollo de Pocket PC 2003 rollo y los que admite el
desarrollo de Smartphone 2003.
Controles y componentes en proyectos de dispositivos administrados
Describe controles adicionales y componentes disponibles para el desarrollo de dispositivos.
Controles personalizados y de usuario en proyectos de dispositivos
Describe la funcionalidad disponible para los proyectos de dispositivos.
Interoperabilidad COM para dispositivos
Describe cómo crear ensamblados COM Interop en proyectos de dispositivos administrados.
Crear y desarrollar proyectos de dispositivos administrados
Proporciona instrucciones paso a paso para las tareas de desarrollo de dispositivos más comunes.
Datos en proyectos de dispositivos administrados
Describe cómo administrar datos para los dispositivos de Visual Studio 2005.
Tutorial: Crear una aplicación simple
Proporciona instrucciones paso a paso para crear un proyecto de dispositivo simple de Visual Basic o Visual C#.
Vea también
Tareas
Tutorial: Crear aplicaciones de Windows Forms para un dispositivo
Otros recursos
.NET Compact Framework
Desarrollo de dispositivos inteligentes
.NET Compact Framework
Preguntas más frecuentes
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Lo nuevo en proyectos para dispositivos administrados


La siguiente lista describe las mejoras para el desarrollo de aplicaciones para dispositivos administrados agregadas desde
Visual Studio .NET 2003.
Nota
Aunque puede utilizar Visual Studio 2005 para programar con las versiones 1,0 y 2,0 de .NET Compact Framework, la versió
n 1,0 no admite las características siguientes marcadas con un asterisco (*).

Nuevas características
Las características siguientes están disponibles en Visual Studio 2005.
Característica Detalles
*Delimitar controles en formularios Windows Cómo: Delimitar controles en formularios Windows For
ms

Generación de archivos CAB con proyectos de instalación e impleme Información general sobre el empaquetado de solucione
ntación de Visual Studio. Este proceso elimina la necesidad de perso s para dispositivos
nalizar el archivo .inf manualmente.

Filtrar las propiedades, los métodos y los eventos no compatibles. La característica incluye IntelliSense con filtro, un paso de
comprobación de generación y capacidad para convertir l
os controles no compatibles.

Editor en color Colores tal y como aparecen en el dispositivo.


Definir color (Cuadro de diálogo, Dispositivos)

Controles personalizados Totalmente compatible. Utilice Diseñar y ver clases y tipo


s para agregar atributos de diseñador personalizados.
*Controles de usuario

*Acoplar controles en formularios Windows Forms Cómo: Acoplar controles en formularios Windows Forms

*Compatibilidad con diseño de datos Datos en proyectos de dispositivos administrados

Editor de fuentes Fuentes admitidas por la plataforma actual.Editor de fuen


tes (Cuadro de diálogo, Dispositivos)

*Compatibilidad con factores de forma, incluidas la orientación y la r Propiedades de factor de forma (Cuadro de diálogo, Disp
esolución. ositivos)
*Ajustar automáticamente

Máscara de formularios con creación de código Propiedades de factor de forma (Cuadro de diálogo, Disp
ositivos)

*Nuevos controles y componentes en el cuadro de herramientas WebBrowser, Notification, DocumentList, DateTimePicker


, MonthCalendar, LinkLabel, Splitter, BindingSource

WYSIWYG específico de la plataforma Los diseñadores mejorados proporcionan el aspecto prec


iso para cada plataforma.

Para la versión 1,0 de .NET Compact Framework Compatibilidad con Smartphone 2003 y Pocket PC 2003
Cambio de plataforma con el mismo código fuente Cómo: Compartir código fuente entre plataformas (Dispo
sitivos)

Vea también
Otros recursos
Lo nuevo en .NET Compact Framework 2.0
Lo nuevo en el entorno de desarrollo
Programación para dispositivos con .NET Compact Framework
Desarrollo para Smart Device

Diferencias respecto al desarrollo para escritorio en .NET


Compact Framework
Antes de iniciar un proyecto de dispositivo, es importante comprender las principales diferencias entre el desarrollo para
escritorio con .NET Framework y el desarrollo para dispositivos con .NET Compact Framework.
Programar elementos en Visual Basic
Si programa en .NET Compact Framework con Visual Basic, no dispone de la misma lista de elementos de programación, como
funciones y palabras clave, que cuando programa en la versión completa de .NET Framework. Las diferencias se resumen en
Referencia del lenguaje Visual Basic para dispositivos y se indican en los temas individuales de esos elementos en Referencia
de Visual Basic.
Desarrollo con la función My
Visual Studio 2005 incluye compatibilidad con My.Resources, My.Forms y My.WebServices. No incluye compatibilidad para
My.Application, My.Computer, My.User y My.Settings. Para obtener más información, vea Referencia de My.
Entrada y salida de archivos
Visual Basic proporciona dos opciones para la entrada/salida (E/S) de archivos:
El espacio de nombres estándar System.IO de .NET Framework. Todos los lenguajes de Common Language Runtime
(CLR) son compatibles con estas bibliotecas.
Un conjunto de bibliotecas específicas de Visual Basic que proporciona una experiencia de desarrollo similar a la de
versiones anteriores de Visual Basic.
Los proyectos de dispositivo sólo son compatibles con el espacio de nombres System.IO de .NET Framework. La funcionalidad
de E/S del espacio de nombres FileSystem no es compatible porque:
Algunas funciones de uso corriente del espacio de nombres FileSystem no existen en los dispositivos. Por ejemplo, en
los dispositivos no existe el concepto de directorio actual o de unidad de disco actual. Por lo tanto, no pueden utilizarse
las funciones ChDir y ChDrive.
Al admitir sólo el espacio de nombres System.IO de .NET Framework, se reduce el tamaño de las bibliotecas auxiliares
Visual Basic. De esta forma, se libera un valioso espacio en el dispositivo.
Enlace implícito en tiempo de ejecución
En Visual Basic, un objeto se enlaza en tiempo de ejecución cuando se asigna a una variable que se declara como variable de
tipo Object (Tipo de datos). Los objetos de este tipo se enlazan en tiempo de ejecución. Puede asignarles valores y recuperar
valores de ellos. Pero no puede especificar los métodos o propiedades de una variable de objeto mediante la convención del
punto. El código siguiente genera un error de compilación porque intenta obtener la propiedad de un objeto:
dim a as object = "automobile"
dim i as integer = a.horsepower

Interoperabilidad COM
Los desarrolladores de aplicaciones de escritorio utilizan la interoperabilidad COM para hacer uso de los objetos COM
existentes mientras hacen la transición a .NET Framework a su propio ritmo. Los proyectos de dispositivo sólo admiten ciertos
escenarios para la interoperabilidad COM. Para obtener más información, vea Interoperabilidad COM para dispositivos.
Depuración
La asociación a procesos en ejecución difiere ligeramente del escritorio. Para obtener más información, vea Cómo: Conectar a
procesos de dispositivos administrados.
Vea también
Referencia
Referencia del lenguaje Visual Basic para dispositivos
System.IO Namespace
Decidir qué tecnologías y herramientas utilizar
Referencia de My
Conceptos
Enlace en tiempo de compilación y en tiempo de ejecución
Me, My, MyBase y MyClass en Visual Basic
Interoperabilidad COM para dispositivos
Otros recursos
Acceso a archivos con Visual Basic
Programación de .NET Framework en Visual Studio
Desarrollo para Smart Device

Variaciones en las versiones de .NET Compact Framework


Cuando desarrolle aplicaciones para dispositivos inteligentes, es importante tener en cuenta las posibles variaciones en la
versión instalada de Compact Framework.
.NET Compact Framework versión 1.0
Versión inicial de Compact Framework.
.NET Compact Framework versión 1.0 SP1
Correcciones de errores de la versión 1.0.
Compatibilidad con Smartphone.
.NET Compact Framework versión 1.0 SP2
Correcciones de errores de la versión 1.0 SP1.
Mejoras en el rendimiento.
Compatibilidad con dispositivos con modos de presentación horizontales.
Compatibilidad con autodesplazamiento, con compatibilidad automática para diálogos en modo horizontal.

.NET Compact Framework versión 1.0 SP3


Correcciones de errores de la versión 1.0 SP2.
.NET Compact Framework versión 2.0
Los dispositivos inteligentes (Smart Devices) que se hayan actualizado a la versión 2.0 de .NET Compact Frameworks tendrán
las siguientes características:
Mejoras en el rendimiento.
Compatibilidad con clases genéricas.
Compatibilidad con la interoperabilidad COM.
Compatibilidad mejorada para controles.
Compatibilidad con Direct3D y DirectDraw para dispositivos móviles.
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Lo nuevo en .NET Compact Framework 2.0
P+F sobre .NET Compact Framework - .NET Compact Framework 2.0
Desarrollo para Smart Device

Diferencias entre controles de Pocket PC 2003 y Smartphone


2003
En la siguiente tabla se resume la diferencia en cuanto a compatibilidad de controles entre Windows Mobile Pocket PC 2003 y
Windows Mobile Smartphone 2003. Algunos controles no tienen sentido en el contexto de Smartphone, que, por ejemplo, no
dispone de ninguna pantalla táctil.
Control Pocket PC 2003 Smartphone 2003
Etiqueta Sí Sí

LinkLabel Sí No

Botón Sí No

TextBox Sí Sí

MainMenu Sí Sí

CheckBox Sí Sí

RadioButton Sí No

PictureBox Sí Sí

Panel Sí Sí

DataGrid Sí No

BindingSource. Sí No

ListBox Sí No

ComboBox Sí Sí

ListView Sí Sí

TreeView Sí Sí

TabControl Sí No

DateTimePicker Sí No

MonthCalendar Sí No

HScrollBar Sí Sí

VScrollBar Sí Sí

Temporizador Sí Sí

Splitter Sí No
DomainUpDown Sí No

NumericUpDown Sí No

TrackBar Sí No

ProgressBar Sí Sí

ImageList Sí Sí

ContextMenu Sí No

ToolBar Sí No

StatusBar Sí No

OpenFileDialog Sí No

SaveFileDialog Sí No

WebBrowser Sí No

InputPanel Sí No

Notificación Sí No

DocumentList Sí No

Es posible compartir código fuente entre plataformas. Para obtener más información, vea Cómo: Compartir código fuente
entre plataformas (Dispositivos).
Vea también
Tareas
Cómo: Actualizar proyectos a las versiones más recientes de .NET Compact Framework
Otros recursos
Programación para dispositivos con .NET Compact Framework
Desarrollo para Smart Device

Controles y componentes en proyectos de dispositivos


administrados
Los proyectos de dispositivos administrados tienen su propio conjunto de controles y componentes y su propia ficha en el
Cuadro de herramientas de Visual Studio. Cuando un proyecto de dispositivos está activo, la ficha Dispositivos está disponible
y permite utilizar operaciones de arrastrar y colocar, como en los proyectos para el escritorio.
Para obtener más información, vea Controles de formularios Windows Forms en .NET Compact Framework
Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Controles personalizados y de usuario en proyectos de


dispositivos
.NET Compact Framework proporciona compatibilidad para crear y personalizar controles para proyectos de formularios
Windows Forms.
Controles de usuario
Puede crear y agregar controles de usuario a los proyectos de dispositivos administrados de la misma manera que para los
proyectos de escritorio. Para obtener más información, vea Cómo: Crear controles compuestos.
Controles personalizados
.NET Compact Framework proporciona varias maneras de personalizar controles. Para obtener más información, vea
Desarrollo de controles personalizados.
Vea también
Tareas
Tutorial: Crear controles de usuario para dispositivos
Tutorial: Agregar un atributo simple a un control de usuario
Otros recursos
Desarrollar controles de formularios Windows Forms en tiempo de diseño
Diseñar y ver clases y tipos
Programación para dispositivos con .NET Compact Framework
Desarrollo para Smart Device

Interoperabilidad COM para dispositivos


.NET Compact Framework admite contenedores a los que se puede llamar en tiempo de ejecución (llamados también
ensamblados de interoperabilidad) para los objetos COM. Esta característica incluye el cálculo de referencias de tipos
complejos. La interoperabilidad COM para dispositivos se basa en la implementación del escritorio. Como tal, los componentes
se deben registrar en el escritorio.
Escenarios admitidos
En Visual Studio 2005, se admiten los siguientes escenarios para proyectos de dispositivos:
Puede agregar un componente COM existente como referencia a un proyecto administrado. Esta acción crea un
ensamblado de interoperabilidad y lo agrega automáticamente como una referencia. A continuación, puede utilizar el
ensamblado de interoperabilidad al igual que cualquier otro ensamblado administrado, y las propiedades, métodos y
eventos del objeto están disponibles para Intellisense y en el Examinador de objetos. Los tipos de archivo legales que se
pueden agregar son DLL, EXE y TLB.
Puede crear un proyecto nativo para generar un componente COM y, a continuación, crear un proyecto administrado en
la misma solución para utilizar el componente COM. El proceso es el mismo que para el escritorio:
Establezca el proyecto nativo para generar un resultado TLB.
Compile el proyecto nativo para generar un archivo DLL.
En el proyecto administrado, agregue una referencia al archivo DLL. Esta acción genera el ensamblado de
interoperabilidad.

Escenarios no compatibles
Los escenarios siguientes no se admiten en Visual Studio 2005:
Hacer referencia a un componente COM ActiveX existente desde dentro de un proyecto administrado
Objetos COM con componentes secundarios que no son del sistema
Objetos COM a los que se hace referencia como objetos comerciales desde dentro del Asistente de DataSource.
Vea también
Tareas
Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para Smart Devices
Tutorial: Depurar una solución que incluye código administrado y código nativo
Conceptos
Información general sobre la interoperabilidad COM
Contenedor al que se puede llamar en tiempo de ejecución
Calcular referencias de interfaces seleccionadas
Otros recursos
Interoperabilidad COM en aplicaciones .NET Framework
Programación para dispositivos con .NET Compact Framework
Interoperabilidad en .NET Compact Framework
Desarrollo para Smart Device

Crear y desarrollar proyectos de dispositivos administrados


El desarrollo de proyectos de dispositivos administrados es muy similar al de proyectos de escritorio administrados. Una
diferencia fundamental consiste en que .NET Compact Framework es un subconjunto de .NET Framework al completo, y en
consecuencia, no se admiten algunas áreas. Para obtener más información, vea .NET Compact Framework.
En esta sección
Cómo: Crear aplicaciones para dispositivos utilizando Visual C# o Visual Basic
Cómo: Mostrar la barra de herramientas Dispositivo en los proyectos de Visual Basic
Cómo: Mostrar el Administrador de configuración en los proyectos de Visual Basic (dispositivos)
Cómo: Compartir código fuente entre plataformas (Dispositivos)
Cómo: Cambiar plataformas en proyectos de dispositivos
Cómo: Actualizar proyectos a las versiones más recientes de .NET Compact Framework
Cómo: Comprobar la compatibilidad del código en plataformas en proyectos de dispositivos
Cómo: Controlar eventos de HardwareButton (Dispositivos)
Cómo: Cambiar la orientación y la resolución de formularios (Dispositivos)
Cómo: Cambiar el dispositivo predeterminado (Proyectos administrados)
Cómo: Reproducir un archivo de onda mediante la invocación de plataforma (Dispositivos)
Administrar fragmentos de código en proyectos de dispositivos
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Programación de .NET Framework en Visual Studio
Desarrollo para Smart Device

Cómo: Crear aplicaciones para dispositivos utilizando Visual C#


o Visual Basic
La creación de proyectos administrados de Visual Basic y Visual C# para dispositivos sigue el mismo proceso general que la
creación de proyectos para el escritorio, con la excepción de que el usuario debe seleccionar una plataforma de destino (por
ejemplo, Pocket PC 2003) y una versión de .NET Compact Framework (por ejemplo, v2.0) donde el proyecto está diseñado para
ejecutarse.
Un cuadro de diálogo Nuevo proyecto mejorado de Visual Studio 2005 reemplaza al Asistente para aplicaciones de Smart
Device de Visual Studio .NET 2003. En Visual Studio 2005, las decisiones relativas a los tipos de proyectos y plantillas se toman
en el cuadro de diálogo Nuevo proyecto.
Nota
Las opciones disponibles en cuadros de diálogo y los comandos de menú difieren dependiendo de los valores de configuraci
ón activos, que también se conocen como perfil. El siguiente procedimiento se escribió utilizando la configuración de desarro
llo de Visual Basic y la configuración de desarrollo de Visual C#. Para ver o cambiar su configuración, elija la opción Importa
r y exportar configuraciones del menú Herramientas.

Para crear un proyecto para dispositivos


1. (Visual Basic) En el menú Archivo de Visual Studio 2005, haga clic enNuevo proyecto.
O bien
(Visual C#) En el menú Archivo de Visual Studio 2005, señale a Nuevoy, a continuación, haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Proyectos de Visual Basic o Proyectos de
Visual C#, expanda Smart Device y, a continuación, haga clic en la plataforma que desee, como Pocket PC 2003.
Si el lenguaje que desea no aparece desde un principio, expanda Otros lenguajes. Esta presentación se rige por la
configuración de desarrollo. Para ver o cambiar su configuración, elija la opción Importar y exportar configuraciones
en el menú Herramientas.
3. En Plantillas, haga clic en la plantilla más adecuada para lo que desea hacer, por ejemplo Biblioteca de clases de
Pocket PC 2003.
Nota
Una plantilla que tenga (1.0) junto a su nombre está diseñada para la versión 1.0 de .NET Compact Framework. Otras pl
antillas están diseñadas para la versión 2.0.

4. En el cuadro Nombre, escriba un nombre para el proyecto.


Si aparece un cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto y, a continuación, haga
clic en Aceptar.
Para agregar un proyecto a una solución existente
En el menú Archivo, señale Agregar y, a continuación, haga clic en Nuevo proyecto o Proyecto existente.
El comando Nuevo proyecto abre el cuadro de diálogo Nuevo proyecto para que se pueda crear un nuevo proyecto.
El comando Proyecto existente abre el cuadro de diálogo Agregar proyecto existente para que se pueda seleccionar
un proyecto existente para incluir en la solución actual.
Para trasladar proyectos existentes
Los pasos para trasladar proyectos creados con una versión anterior de Visual Studio se describen en la documentación
general de administración de proyectos de Visual Studio. Para obtener más información, vea Proyectos y compatibilidad
con versiones anteriores y Trabajar con varias versiones de .NET Framework.
Vea también
Tareas
Tutorial: Crear aplicaciones de Windows Forms para un dispositivo
Referencia
Decidir qué tecnologías y herramientas utilizar
Otros recursos
Lo nuevo en .NET Compact Framework 2.0
Administrar soluciones, proyectos y archivos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Mostrar la barra de herramientas Dispositivo en los


proyectos de Visual Basic
Si se selecciona la opción Configuración de desarrollo de Visual Basic, la barra de herramientas Dispositivo no aparece de
forma predeterminada.
Para mostrar la barra de herramientas Dispositivo
En el menú Ver de Visual Studio, seleccione Barras de herramientas y, a continuación, haga clic en Dispositivo.
Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Mostrar el Administrador de configuración en los


proyectos de Visual Basic (dispositivos)
Si ha seleccionado Configuración de desarrollo de Visual Basic, Administrador de configuración no aparecerá de forma
predeterminada. El Administrador de configuración se utiliza cuando, por ejemplo, se desea cambiar de la configuración
Debug a la configuración Release. En los pasos siguientes, se muestra cómo mostrar el Administrador de configuración.
Para mostrar Administrador de configuración en un proyecto de dispositivo de Visual Basic
1. En el menú Herramientas, haga clic en Opciones, expanda Proyectos y soluciones y, a continuación, haga clic en
General.
2. Haga clic en Mostrar configuraciones de generación avanzadas.
Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Compartir código fuente entre plataformas


(Dispositivos)
Puede compartir código fuente entre plataformas mediante constantes del compilador para diferenciar las secciones de código
que dependen del destino. Las constantes permitidas son PocketPC, Smartphone y WindowsCE. Las plataformas deben tener
como destino la misma versión de .NET Compact Framework.
Los pasos siguientes proporcionan un ejemplo sencillo de esta técnica. Cree una aplicación Visual Basic de Pocket PC, agregue
directivas del compilador, ejecute la aplicación, ciérrela y cambie a una aplicación de Smartphone. A continuación, ejecute la
aplicación de Smartphone para ver que el texto de la barra de título ha cambiado.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para crear y ejecutar la versión de Pocket PC


1. En el menú Archivo de Visual Studio, señale Nuevo y, a continuación, haga clic en Proyecto.
2. En el panel Tipos de proyecto, expanda Visual Basic, expanda Smart Device y, a continuación, haga clic en Pocket PC
2003.
3. En el panel Plantillas, haga clic en Aplicación de dispositivo (1.0) y, a continuación, en Aceptar.
(1.0) indica que se trata de un proyecto .NET Compact Framework versión 1.0.
4. En el diseñador, haga clic con el botón secundario del mouse en el formulario y, a continuación, en el menú contextual,
haga clic en Propiedades.
5. Borre el valor de la propiedad Texto del formulario, es decir, déjela en blanco.
6. En Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.vb y, a continuación, en el menú
contextual, haga clic en Ver código.
7. Expanda la zona Código generado por el Diseñador de Windows Forms.
8. Después de InitializeComponent() en Public Sub New(), inserte el código siguiente:

#If PocketPC Then


Me.Text = "PPC2003"
#Else
Me.Text = "Smartphone"
#Endif

9. En el menú Depurar, haga clic en Iniciar depuración.


10. En el cuadro de diálogo Implementar <Nombre de proyecto>, haga clic en Pocket PC 2003 SE - Emulador y, a
continuación, en Implementar.
La aplicación de Pocket PC se ejecuta en el emulador y muestra PPC2003 en la barra de título del formulario.
Para crear y ejecutar la versión de Smartphone
1. Cierre el emulador sin guardar el estado.
Si aparece un mensaje que indica que se ha perdido la conexión, haga clic en Aceptar.
2. En el menú Proyecto, haga clic en Cambiar plataforma de destino.
3. En el cuadro Cambiar a que aparece en el cuadro de diálogo Cambiar plataforma de destino, seleccione
Smartphone2003 y, a continuación, haga clic en Aceptar.
4. En el cuadro de mensaje que indica que se cerrará el proyecto y se volverá a abrir, haga clic en Sí.
Observe que el cuadro Dispositivo de destino que aparece en la barra de herramientas ahora muestra Smartphone
2003 SE - Emulador.
5. En el menú Depurar, haga clic en Iniciar depuración.
6. En el cuadro de diálogo Implementar <nombre de proyecto>, haga clic en Smartphone 2003 SE - Emulador y, a
continuación, haga clic en Implementar.
La aplicación de Smartphone se ejecuta en el emulador con Smartphone en la barra de título del formulario.
Vea también
Tareas
Cómo: Cambiar plataformas en proyectos de dispositivos
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Cambiar plataformas en proyectos de dispositivos


Puede cambiar de una plataforma a otra en el mismo proyecto. Por ejemplo, si la plataforma de destino es Pocket PC, puede
cambiar a una plataforma de destino Windows CE, siempre que la nueva plataforma apunte a la misma versión de .NET
Compact Framework que el destino original.
Para cambiar las plataformas de destino en un proyecto de dispositivo
1. En el menú Proyecto, haga clic en Cambiar plataforma de destino.
2. En el cuadro Cambiar a, seleccione una plataforma diferente y, a continuación, haga clic en Aceptar.
Las únicas plataformas disponibles son las que apuntan a la misma versión de .NET Compact Framework que el proyecto
activo.
Vea también
Referencia
Cambiar plataforma de destino (Cuadro de diálogo, Dispositivos)
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Actualizar proyectos a las versiones más recientes de


.NET Compact Framework
Este procedimiento actualiza la versión de .NET Compact Framework de un proyecto existente si se instala una versión
posterior de .NET Compact Framework en el equipo de desarrollo.
Para actualizar un proyecto a una versión más reciente de .NET Compact Framework
1. En el menú Proyecto, haga clic en Actualizar proyecto.
Nota
Si el comando Actualizar proyecto no aparece en el menú, no hay ninguna versión posterior de la plataforma instala
da en el equipo de desarrollo, por lo que el proceso de actualización no está disponible para el proyecto actual.

2. Siga las instrucciones del mensaje que aparece en pantalla.


Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Comprobar la compatibilidad del código en plataformas


en proyectos de dispositivos
Visual Studio siempre comprueba si la plataforma de destino admite el código y genera advertencias si no es así.
Puede evitar la implementación del código no compatible estipulando que todas las advertencias se traten como errores para
que la generación produzca un error.
Por ejemplo, el código de Visual Basic siguiente, aunque se compila, generaría una advertencia o un error en una aplicación
para Smartphone, porque Smartphone no admite botones.
Dim btn as System.Windows.Forms.Button
btn = new System.Windows.Forms.Button()

btn.Caption = "MyButton"

Para tratar todas las advertencias como errores en Visual Basic


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto> y, a
continuación, haga clic en Propiedades en el menú contextual.
2. En la ficha Compilar, seleccione Considerar todas las advertencias como errores.
Para tratar todas las advertencias como errores en Visual C#
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto> y, a
continuación, haga clic en Propiedades en el menú contextual.
2. En la ficha Generar, seleccione Todos en la sección Tratar advertencias como errores.

Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Controlar eventos de HardwareButton (Dispositivos)


Utilice un control HardwareButton para reemplazar las claves de aplicación en un Pocket PC.
Para asignar un componente HardwareButton a una tecla de aplicación concreta
1. Desde la ficha Componentes de dispositivo del Cuadro de herramientas, arrastre un componente HardwareButton
a un formulario Windows Forms o a la bandeja de componentes del diseñador.
2. En la bandeja de componentes, haga clic con el botón secundario del mouse en el control HardwareButton y, a
continuación, en el menú contextual, haga clic en Propiedades.
3. Establezca la propiedad AssociatedControl en el formulario, por ejemplo, Form1.
4. Establezca la propiedad HardwareKey en la tecla que desee reemplazar, por ejemplo, ApplicationKey1.
5. Haga clic en el botón, por ejemplo, Tecla programable 1, en la máscara del diseñador.
El Editor de código se abre en el controlador de eventos Form_KeyDown.
6. Inserte el código siguiente:

if ((int) e.KeyCode == (int) Microsoft.WindowsCE.Forms.HardwareKeys.ApplicationKey1)


{
//TODO
}

Normalmente se haría uso de la sección //TODO para iniciar una aplicación.

Vea también
Tareas
Cómo: Utilizar el componente HardwareButton
Referencia
HardwareButton
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Cambiar la orientación y la resolución de formularios


(Dispositivos)
Las propiedades de orientación (rotación) predeterminadas ya están establecidas para las plataformas instaladas con Visual
Studio. Utilice los pasos siguientes si necesita cambiar las propiedades o si ha instalado un SDK en el que estas propiedades
son incorrectas o faltan.
Para cambiar la orientación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
Factores de forma.
2. Seleccione el factor de forma (por ejemplo, Retrato de Pocket PC 2003) para el formulario de su proyecto y, a
continuación, haga clic en Propiedades.
3. Seleccione Mostrar máscara en el Diseñador de Windows Forms y Habilitar compatibilidad de rotación.
4. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del factor de forma y haga clic en Aceptar de
nuevo para cerrar el cuadro de diálogo Opciones.
Nota
Si el diseñador estaba abierto cuando se cambiaron las opciones, ciérrelo y ábralo de nuevo para que los cambios surta
n efecto.

5. En el diseñador, haga clic con el botón secundario del mouse en el formulario o la máscara y, a continuación, seleccione
Girar a la izquierda o Girar a la derecha para hacer rotar la máscara.
El hecho de que gire el formulario cuando gira el dispositivo depende de la plataforma actual y de los valores de
configuración de las propiedades del formulario, de la siguiente manera:
Smartphone: el formulario siempre gira cuando gira el dispositivo.
Pocket PC: el formulario gira de forma predeterminada cuando gira el dispositivo. Para evitar que el formulario gire
con el dispositivo, establezca la propiedad WindowState del formulario en Normal y la propiedad
FormBorderStyle en None.
Windows CE: el formulario no gira de forma predeterminada cuando gira el dispositivo. Para que el formulario gire
con el dispositivo, establezca la propiedad WindowState en Maximized.
Para cambiar la resolución
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
Factores de forma.
2. Seleccione el factor de forma (por ejemplo, Retrato de Pocket PC 2003) para el formulario de su proyecto y, a
continuación, haga clic en Propiedades.
3. En el cuadro de diálogo Propiedades del factor de forma, establezca la resolución vertical y horizontal.
4. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del factor de forma y haga clic en Aceptar de
nuevo para cerrar el cuadro de diálogo Opciones.
Nota
Si el diseñador estaba abierto cuando se cambiaron las opciones, ciérrelo y ábralo de nuevo para que los cambios surta
n efecto.

Vea también
Referencia
Propiedades de factor de forma (Cuadro de diálogo, Dispositivos)
Factores de forma, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Desarrollo para Smart Device

Cómo: Cambiar el dispositivo predeterminado (Proyectos


administrados)
Siga los pasos que se indican a continuación para cambiar el dispositivo de destino predeterminado en proyectos
administrados.
Para seleccionar un nuevo dispositivo de destino predeterminado para un proyecto administrado
1. En Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto>.
2. En el menú contextual, haga clic en Propiedadesy, a continuación, seleccione el panel Dispositivos.
3. Utilice la lista desplegable que aparece en el cuadro Dispositivo de destino para seleccionar un nuevo destino
predeterminado.
Vea también
Tareas
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Referencia
Implementar (Cuadro de diálogo, Dispositivos)
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Cómo: Reproducir un archivo de onda mediante la invocación


de plataforma (Dispositivos)
En el siguiente ejemplo de código puede verse cómo utilizar una invocación de plataforma (PInvoke) para reproducir un
archivo de sonido de onda en un dispositivo móvil.
Ejemplo
Este código de ejemplo reproduce un archivo de sonido utilizando PlaySound en el dispositivo móvil. Este código utiliza
System.Runtime.InteropServices para invocar el método PlaySound de CoreDll.DLL de Compact FrameWork.

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace MobileSoundPInvoke
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;

public Form1()
{
InitializeComponent();
PlaySound(".\\sound.wav");
}

#region Windows Form Designer generated code


private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.Menu = this.mainMenu1;

this.Text = "Form1";
}

#endregion
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
static void Main()
{
Application.Run(new Form1());
}
private enum Flags
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int MobilePlaySound(string szSound, IntPtr hMod, int flags);
public void PlaySound(string fileName)
{
MobilePlaySound(fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENA
ME));
}

}
}

Compilar el código
Cree un nuevo proyecto para la aplicación Smartphone de C# en Visual Studio y póngale MobileSoundPInvoke como
nombre.
Copie el código del ejemplo anterior y péguelo en el archivo Form1.cs del proyecto MobileSoundPInvoke en una
aplicación de la consola.
Programación eficaz
Hay que asegurarse de que se pasan los parámetros adecuados al a función C MobilePlaySound (string szSound,
IntPtr hMod, int flags), incluidos la ruta y el nombre del archivo para el archivo .wav.

Seguridad
Para obtener más información sobre seguridad, vea .NET Framework Security.
Vea también
Tareas
Ejemplo de tecnología de invocación de plataformas
Otros recursos
Ejemplos de dispositivos inteligentes
Tutoriales sobre dispositivos inteligentes
Utilizar un elemento PInvoke explícito en C++ (Atributo DllImport)
Crear una biblioteca de P/Invocar
http://pinvoke.net/
Desarrollo para Smart Device

Administrar fragmentos de código en proyectos de dispositivos


Visual Basic incluye una biblioteca de código de miniprogramas de código IntelliSense que se puede insertar en la aplicación
mediante unos clics del mouse. Cada miniprograma realiza una tarea de programación completa. También puede crear sus
propios miniprogramas, agregarlos a la biblioteca y utilizarlos después cuando los necesite.
Visual Studio ha agregado fragmentos de código que pertenecen exclusivamente a proyectos de dispositivos. Todos los
accesos directos a estos fragmentos de código comienzan con los caracteres sd. Para obtener más información, vea
Fragmentos de código de IntelliSense de Visual Basic.
Vea también
Otros recursos
Crear y desarrollar proyectos de dispositivos administrados
Desarrollo para Smart Device

Datos en proyectos de dispositivos administrados


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Visual Studio 2005 proporciona nuevas herramientas de administración de bases de datos para soluciones de dispositivos,
incluyendo la capacidad para crear nuevas bases de datos, modificar sus esquemas y controlar otras tareas de administración
como el establecimiento de contraseñas y la compresión de la base de datos.
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
En esta sección
Información general sobre el acceso a datos (Proyectos de dispositivos administrados)
Describe las características disponibles en Visual Studio para controlar aplicaciones de datos en proyectos de dispositivos.
Conjuntos de resultados y conjuntos de datos (Dispositivos)
Describe la diferencia entre estas dos técnicas y explica las razones para utilizar una u otra.
Generar objetos ResultSet con tipo
Describe de forma más detallada las características ofrecidas por ResultSets.
Administrar orígenes de datos en proyectos de dispositivos
Muestra los pasos para realizar tareas comunes, como crear una base de datos de SQL Server Mobile o SQL Server Compact
Edition, modificar esquemas de tablas, administrar contraseñas, etc.
Vea también
Tareas
Tutorial: Aplicación Principal-Detalle para una base de datos
Conceptos
Conectarse a datos en Información general de Visual Studio
Otros recursos
Crear aplicaciones de datos cliente
Tutoriales sobre datos
Programación para dispositivos con .NET Compact Framework
SQL Server Mobile Edition Books Online Home Page
Programación para dispositivos con .NET Compact Framework
Desarrollo para Smart Device

Información general sobre el acceso a datos (Proyectos de


dispositivos administrados)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
El entorno del Visual Studio para desarrollo de proyectos de dispositivos que manipulan datos es similar al entorno de
desarrollo de aplicaciones de datos de escritorio. Las aplicaciones de datos administrados para dispositivos se basan en
espacios de nombres ADO.NET admitidos por .NET Compact Framework. Esta combinación se presta a aplicaciones en las que
el almacén de datos del dispositivo está normalmente desconectado de los datos de un servidor y sólo se sincroniza
periódicamente.
Datos para dispositivos: Lo nuevo en Visual Studio 2005
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
Puede crear bases de datos de SQL Server Mobile o Microsoft SQL Server 2005 Compact Edition, asignar contraseñas,
modificar esquemas y realizar otras tareas importantes de administración de bases de datos con el IDE de Visual Studio.
Es posible utilizar conjuntos de datos con tipo, conjuntos de resultados, objetos comerciales, bases de datos de SQL
Server, bases de datos de SQL Server Compact Edition o servicios Web como orígenes de datos.
Puede arrastrar y soltar estos orígenes de datos desde la ventana Orígenes de datos hasta un formulario Windows
Forms para generar controles enlazados a datos de su elección.
Nota
El Asistente para configuración de orígenes de datos no se encuentra disponible para proyectos cuya versión de d
estino es la 1.0 de .NET Compact Framework.

Arquitecturas de SQL Server Mobile Edition y SQL Server Compact Edition


La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
SQL Server Mobile y SQL Server Compact Edition constituyen el mejor motor de datos de carácter local para dispositivos que
sólo se conectan ocasionalmente. Puede programar utilizando .NET Compact Framework para las aplicaciones administradas o
Microsoft Visual C++ for Devices para las aplicaciones nativas. Para obtener más información, consulte SQL Server Mobile
Architecture.
Usos típicos de SQL Server Mobile Edition y SQL Server Compact Edition
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
SQL Server Mobile y SQL Server Compact Edition proporcionan una solución para los escenarios de acceso a datos con
conexión ocasional en dispositivos móviles. En los escenarios móviles de empresa, se necesita trabajar con frecuencia con
datos cuando no hay conectividad disponible. SQL Server Mobile y SQL Server Compact Edition resuelven estos casos
mediante almacenes relacionales completos que se pueden sincronizar con SQL Server cuando hay una conexión disponible.
Para obtener más información, consulte Typical Uses of SQL Server Mobile.
Nota
Se puede utilizar SQL Server Mobile y SQL Server Compact Edition como almacenes de datos tanto para aplicaciones de Tabl
et PC como para aplicaciones de dispositivos. También se pueden ejecutar en equipos portátiles y de escritorio en caso de te
ner instalado Visual Studio 2005 o SQL Server 2005. Para obtener más información, consulte Building a SQL Server Mobile
Application for Tablet PCs.

Características de SQL Server Mobile y SQL Server Compact Edition


La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
SQL Server Mobile y SQL Server Compact Edition proporcionan una gran cantidad de características, ya sea como parte de una
aplicación de .NET Compact Framework o como instalación independiente en un dispositivo inteligente. Los datos se pueden
manipular sin conexión y sincronizarse más tarde con un servidor. Para obtener más información, consulte SQL Server Mobile
Features.
Diseñar y administrar bases de datos de SQL Server
Para desarrollar aplicaciones de datos eficaces para dispositivos, es necesario conocer las buenas prácticas de diseño de bases
de datos y el motor de base de datos de SQL Server. Debe saber a la perfección cómo mantener las bases de datos, cómo
hacerlas seguras, cómo obtener acceso a sus datos y modificarlos, cómo consultarlos eficazmente y cómo maximizar su
rendimiento. Para obtener más información, consulte Working with Databases (SQL Server Mobile) y Enhancing Performance
(SQL Server Mobile).
Conexiones con un Servidor
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
SQL Server Mobile y SQL Server Compact Edition admiten réplica de mezcla, acceso a datos remotos y planeamiento e
implementación de seguridad en el servidor. Para obtener más información, consulte Managing Connectivity (SQL Server
Mobile).
Implementar tareas comunes mediante programación
Para consultar los pasos para implementar tareas comunes mediante programación, consulte How To (SQL Server Mobile).
Seguridad local
El motor de base de datos de SQL Server Mobile y SQL Server Compact Edition proporciona protección con contraseña y
cifrado para proteger las bases de datos locales en los dispositivos. También proporcionan opciones de seguridad de
conectividad. Para obtener más información, consulte Securing Databases (SQL Server Mobile).
Vea también
Tareas
Tutorial: Aplicación Principal-Detalle para una base de datos
Cómo: Instalar bases de datos de ejemplo
Conceptos
Lo nuevo en datos
Proteger cadenas de conexión
Conectarse a datos en Información general de Visual Studio
Otros recursos
SQL Server Mobile Edition Books Online Home Page
Crear aplicaciones de datos cliente
Tutoriales sobre datos
Programación para dispositivos con .NET Compact Framework
Datos en proyectos de dispositivos administrados
Obtener acceso a datos (Visual Studio)
Desarrollo para Smart Device

Conjuntos de resultados y conjuntos de datos (Dispositivos)


Visual Studio 2005 genera conjuntos de datos y conjuntos de resultados cuando se utiliza el Asistente de DataSource para
crear un nuevo origen de datos. El código de conjunto de resultados es más eficaz y mucho menos detallado que el código de
conjunto de datos. Por otro lado, los conjuntos de datos son más ricos, en el sentido de que pueden contener varias tablas y
mantener información sobre las relaciones entre ellas. El modelo de programación es significativamente diferente entre las dos
tecnologías.
Puede optar por generar cualquiera de estas estructuras o ambas, en función de sus necesidades. Esta característica se
proporciona para desarrolladores avanzados. Para obtener más información, vea Cómo: Generar código SqlCeResultSet
(Dispositivos).
Vea también
Tareas
Cómo: Generar código SqlCeResultSet (Dispositivos)
Conceptos
Recomendaciones sobre la estrategia de acceso a datos
Otros recursos
Portal de SQL Server Compact Edition
Datos en proyectos de dispositivos administrados
Desarrollo para Smart Device

Generar objetos ResultSet con tipo


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Cuando la propiedad CustomTool de un archivo de esquema XSD se establece en MSResultSetGenerator, se generan los
objetos de origen de datos ResultSet escritos en lugar de los objetos de origen de datos DataSet normales. Los ResultSet son
cursores de base de datos rápidos que admiten el enlace de datos de interfaz de usuario, el desplazamiento hacia delante y
hacia atrás, y la actualización de datos en la base de datos. Como modelo de conexión permanente, ResultSet mantienen una
conexión activa a la base de datos.
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)

Funciones escritas de ResultSet


Los objetos ResultSet escritos ofrecen un acceso con seguridad de tipos a la base de datos de un modo muy parecido a
DataSets. De este modo, el código generado garantiza que los datos que se pasan entre la aplicación y la base de datos
coinciden con el esquema de base de datos en el tiempo de compilación. El código con tipo generado mediante ResultSet se
extiende a la clase base ResultSet de SQL Server Mobile Edition o SQL Server Compact Edition para proporcionar las
propiedades y métodos específicos a la tabla de base de datos de destino.
Los párrafos siguientes resumen las características del código generado para un ResultSet escrito.
Constructores El ResultSet escrito generado contiene dos constructores. El constructor predeterminado se utiliza tanto
para los escenarios básicos en tiempo de ejecución como para los en tiempo de diseño. El tiempo de diseño de Visual
Studio exige que el constructor predeterminado realice una conexión a la base de datos que reside en el equipo de
programación local. Así pues, el código generado contiene una cadena de conexión al archivo de base de datos local de
SQL Server Mobile Edition o SQL Server Compact Edition. Para el tiempo de ejecución, el constructor predeterminado
cambia al archivo de base de datos local del mismo directorio que la aplicación de ejecución. Éste es un escenario en
tiempo de ejecución básico.
Cadenas de conexión Cuando el escenario en tiempo de ejecución es más complejo, por ejemplo, si el archivo de base
de datos de SQL Server Mobile Edition o SQL Server Compact Edition reside en una ubicación de dispositivo distinta del
directorio de ejecución, o si la cadena de conexión varía de algún otro modo (por ejemplo, un cambio de contraseña), se
puede utilizar el constructor sobrecargado. El constructor sobrecargado toma dos argumentos: una cadena de conexión
personalizada y un indicador ResultSetOptions personalizado.
Propiedad Connection La propiedad de conexión es el objeto SqlCeConnection activo que utiliza ResultSet para
tener acceso a los datos de la base de datos. La propiedad de conexión es pública y permite el acceso para administrar el
estado de la conexión del ResultSet escrito. Por ejemplo, la conexión puede ser necesaria para algunas transacciones.
Acceso seguro a las columnas de la tabla escrito El código generado crea un descriptor de acceso de propiedad
para cada columna de la tabla de datos. El tipo de propiedad se determina asignando el tipo de base de datos subyacente
al tipo de .NET Framework. Por ejemplo, nvarchar se asigna a una cadena de .NET Framework. La propiedad generada
admite descriptores de acceso Get y Set, permitiendo la extracción e inserción de datos mediante cadenas de .NET
Framework en lugar del elemento nvarchar de la base de datos subyacente. Cada columna dispone también de un
método IsxxxDBNull y SetxxxDBNull, donde xxx es el nombre de columna, para facilitar la obtención y la
configuración de DBNull en la base de datos.
Método AddxxxRecord (xxx es el nombre de la tabla) Este método permite agregar nuevas filas a la tabla de base de
datos. El método AddxxxRecord tiene un parámetro para cada columna de la tabla de datos, excepto para las columnas
que se incrementan automáticamente, cuyos valores les son asignados por el motor de la base de datos. Todos los
parámetros se vuelven a declarar como tipos de .NET Framework, habilitando un uso fácil con la aplicación y obteniendo
un resumen del tipo de base de datos subyacente. No es necesario llamar al método Update después de llamar a este
método. Una vez realizada la llamada, se confirma la nueva fila en la base de datos.
Método DeletexxxRecord (xxx es el nombre de la tabla) Este método elimina la fila actual de la base de datos. A
diferencia de DataSets, esta transición no se almacena en memoria caché y, una vez llamada, se elimina la fila de la base
de datos. No es necesario llamar al método Update después de llamar a este método.
Método Bind El método de enlace toma un parámetro, BindingSource, que está enlazado a los datos de uno o varios
controles de interfaz de usuario en el formulario. A continuación, este método enlaza los datos de BindingSource a la
instancia del ResultSet escrito, completando la cadena de enlace de datos y permitiendo que los controles muestren los
datos directamente en la base de datos.
Nota
El escenario en tiempo de diseño requiere una cadena codificada de conexión a la base de datos de SQL Server Mobile
Edition o SQL Server Compact Edition. Esta cadena de conexión se puede caducar si, por ejemplo, un proyecto se comp
arte entre programadores. Como resultado, es posible que la ventana Origen de datos o el Diseñador de Windows Fo
rms no puedan abrir el proyecto. Para corregir esta situación, puede volver a generar el código ResultSet con tipo. En E
xplorador de soluciones, haga clic con el botón secundario en el archivo de esquema XSD y, a continuación, haga clic
en Ejecutar herramienta personalizada.

Vea también
Referencia
SqlCeResultSet
Conceptos
Conjuntos de resultados y conjuntos de datos (Dispositivos)
Otros recursos
Datos en proyectos de dispositivos administrados
Desarrollo para Smart Device

Administrar orígenes de datos en proyectos de dispositivos


En las siguientes secciones se describe cómo implementar tareas de datos comunes en proyectos de dispositivos.
Nota
El Asistente para configuración de orígenes de datos no se encuentra disponible para proyectos cuya versión de destino
es la 1.0 de .NET Compact Framework.

En esta sección
Cómo: Crear una base de datos (Dispositivos)
Cómo: Cambiar la cadena de conexión en tiempo de diseño (Dispositivos)
Cómo: Cambiar la cadena de conexión en tiempo de ejecución (Dispositivos)
Cómo: Administrar contraseñas para bases de datos (Dispositivos)
Cómo: Reducir y reparar una base de datos (Dispositivos)
Cómo: Agregar una base de datos a un proyecto de dispositivos
Cómo: Administrar tablas en una base de datos (Dispositivos)
Cómo: Administrar columnas en una base de datos (Dispositivos)
Cómo: Administrar índices en una base de datos (Dispositivos)
Cómo: Obtener una vista previa de datos en una base de datos (Dispositivos)
Cómo: Crear consultas parametrizadas (Dispositivos)
Cómo: Crear aplicaciones Principal-Detalle (Dispositivos)
Cómo: Agregar botones de exploración (Dispositivos)
Cómo: Conservar cambios de datos en la base de datos (Dispositivos)
Cómo: Generar código SqlCeResultSet (Dispositivos)
Cómo: Agregar un objeto comercial como origen de datos (Dispositivos)
Cómo: Agregar un servicio Web como origen de datos (Dispositivos)
Cómo: Agregar una base de datos de SQL Server como origen de datos (Dispositivos)
Cómo: Generar vistas de resumen y edición para aplicaciones de datos (Dispositivos)
Vea también
Conceptos
Conectarse a datos en Información general de Visual Studio
Otros recursos
SQL Server Mobile Edition Books Online Home Page
Datos en proyectos de dispositivos administrados
Desarrollo para Smart Device

Utilizar bases de datos de SQL Server Mobile Edition y SQL


Server Compact Edition
Este tema es nuevo en el SP1 de Visual Studio 2005.
Visual Studio 2005 incluye SQL Server Mobile Edition que los programadores de Smart Device pueden usar al crear las
aplicaciones de base de datos. El Service Pack 1 de Visual Studio 2005 permite que los programadores usen Microsoft SQL
Server 2005 Compact Edition, una nueva versión que también incluye características para programadores de aplicaciones para
equipos de escritorio. En el caso de los programadores de Smart Device, SQL Server Compact Edition y SQL Server Mobile
Edition proporcionan el mismo conjunto de características.
Sin embargo, para aprovechar al máximo las características de datos enriquecidos en tiempo de diseño del Service Pack 1 de
Visual Studio, debe escribir la aplicación de datos mediante SQL Server Compact Edition 3.1 y .NET Compact Framework 2.0.
Debe instalar tanto el SP1 de Visual Studio como SQL Server Compact Edition Tools para el SP1 de Visual Studio 2005. Para
obtener más información, vea Cómo: Instalar bases de datos de ejemplo.
La tabla siguiente se vincula a información que le permite usar el entorno de desarrollo integrado (IDE) de Visual Studio para
interactuar eficazmente con las bases de datos.
Tareas de bases de datos comunes
Cómo: Crear una base de datos (Dispositivos) Cómo: Generar vistas de resumen y edición para aplicaciones de datos (
Dispositivos)

Cómo: Crear aplicaciones Principal-Detalle (Dispositi Cómo: Administrar columnas en una base de datos (Dispositivos)
vos)

Cómo: Crear consultas parametrizadas (Dispositivos) Cómo: Administrar contraseñas para bases de datos (Dispositivos)

Cómo: Generar código SqlCeResultSet (Dispositivos) Cómo: Obtener una vista previa de datos en una base de datos (Dispositi
vos)

Cómo: Reducir y reparar una base de datos (Disposit Cómo: Agregar una base de datos a un proyecto de dispositivos
ivos)

Cómo: Administrar tablas en una base de datos (Dis Cómo: Administrar índices en una base de datos (Dispositivos)
positivos)

Cómo: Agregar botones de exploración (Dispositivos Cómo: Conservar cambios de datos en la base de datos (Dispositivos)
)

Vea también
Conceptos
SQL Server Compact Edition con .NET Compact Framework
Desarrollo para Smart Device

Cómo: Crear una base de datos (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Los procedimientos siguientes se han actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Puede crear una base de datos de SQL Server Mobile o SQL Server Compact Edition tanto si tiene un proyecto abierto como si
no. Si la base de datos va a formar parte de un proyecto, considere crearla dentro del proyecto como origen de datos para el
mismo. Aunque cree la base de datos fuera de un proyecto, puede agregarla después a un proyecto. Para obtener más
información, consulte Cómo: Agregar una base de datos a un proyecto de dispositivos.
Nota
Dos o más procesos no pueden tener acceso simultáneamente a la misma base de datos de SQL Server Mobile o SQL Server
Compact Edition a través de un recurso compartido de red, porque el segundo proceso producirá un error de infracción de u
so compartido de archivos. Sin embargo, un proceso puede abrir varias conexiones a la base de datos. Por ejemplo, el proces
o puede ejecutar simultáneamente una consulta Insert en una conexión y una consulta Select en otra conexión. Utilice el mod
o de archivo DB_MODE_SHARE_EXCLUSIVE al abrir un archivo de base de datos a través de un recurso compartido de red. P
ara obtener más información, consulte How to: Set the File Mode When Opening a Database with OLE DB (Programmatically
).

Para crear la base de datos fuera de un proyecto


1. En el menú Ver, haga clic en Explorador de servidores.
2. Haga clic con el botón secundario del mouse en Conexiones de datos y, a continuación, en Agregar conexión para
abrir el cuadro de diálogo Agregar conexión.
3. Haga clic en Cambiar para abrir el cuadro de diálogo Cambiar origen de datos.
4. En el cuadro Origen de datos, seleccione Microsoft SQL Server Mobile Edition y, a continuación, haga clic en
Aceptar.
O bien
En el cuadro Origen de datos, seleccione Microsoft SQL Server Compact Edition y, a continuación, haga clic en
Aceptar.
5. Seleccione Microsoft SQL Server Mobile Edition o Microsoft SQL Server Compact Edition y, a continuación, haga
clic en Aceptar.
6. Continúe con "Para continuar con el proceso y configurar la conexión" más abajo.
Para crear la base de datos dentro de un proyecto
1. Con un proyecto abierto, haga clic en Agregar nuevo origen de datos en el menú Datos.
Se abrirá el Asistente para la configuración de orígenes de datos.
2. En la página Elegir un tipo de origen de datos, seleccione Base de datos y, a continuación, haga clic en Siguiente.
3. En la página Elegir la conexión de datos, haga clic en Nueva conexión para abrir el cuadro de diálogo Agregar
conexión.
4. Haga clic en Cambiar para abrir el cuadro de diálogo Cambiar origen de datos.
5. Seleccione Microsoft SQL Server Mobile Edition o Microsoft SQL Server Compact Edition y, a continuación, haga
clic en Aceptar.
6. Continúe con "Para continuar con el proceso y configurar la conexión" más abajo.
Para continuar con el proceso y configurar la conexión
1. En el cuadro de diálogo Agregar conexión, seleccione Mi PC.
2. Haga clic en Crear.
3. En el cuadro de diálogo Crear base de datos de SQL Server 2005 Mobile Edition, escriba la ruta completa para la
nueva base de datos (por ejemplo, c:\MyDB).
O bien
En el cuadro de diálogo Crear base de datos de SQL Server 2005 Compact Edition, escriba la ruta completa de la
nueva base de datos (por ejemplo, c:\MiBD).
4. En los cuadros Nueva contraseña y Confirmar contraseña, escriba una contraseña (por ejemplo, MyPassword) como
la contraseña de la nueva base de datos y, a continuación, haga clic en Aceptar.
Nota de seguridad
En el caso de proyectos que se utilizarán en aplicaciones reales, elija una contraseña segura.

5. Haga clic en Aceptar para volver al cuadro de diálogo Agregar conexión.


6. En el cuadro de diálogo Agregar conexión, haga clic en Probar conexión para garantizar que se ha realizado la
conexión.
Aparece un mensaje que indica que la conexión de prueba se realizó correctamente.
7. Haga clic en Aceptar para volver al cuadro de diálogo Agregar conexión y, a continuación, haga clic en Aceptar para
cerrarlo.
Realice los pasos siguientes únicamente si va a crear una base de datos y un conjunto de datos dentro del proyecto:
8. En la página Elegir la conexión de datos, seleccione Sí, incluir datos que distinguen mayúsculas de minúsculas
en la cadena de conexión.
Nota de seguridad
En el caso de proyectos que se utilizarán en aplicaciones reales, se recomienda elegir exclude datos que distinguen may
úsculas de minúsculas de la cadena de conexión. Al menos conviene asegurarse de que los datos que distinguen mayú
sculas de minúsculas están cifrados.

9. Haga clic en Siguiente.


Aparece el cuadro de mensaje Archivo de base de datos local, que pregunta si desea incluir un determinado archivo
de datos en el proyecto actual.
Haga clic en Sí.
10. En la página Elija los objetos de base de datos, seleccione las tablas u otros objetos que desea incluir en su proyecto.
11. Haga clic en Finalizar.
Ahora puede ver la nueva base de datos como un conjunto de datos en la ventana Orígenes de datos. Para ello, haga
clic en Mostrar orígenes de datos en el menú Datos. Para agregar tablas, columnas, restricciones, etc. a la base de
datos, vea Administrar orígenes de datos en proyectos de dispositivos.

Vea también
Tareas
Cómo: Instalar bases de datos de ejemplo
Otros recursos
Create Database Dialog (SQL Server Mobile)
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Crear aplicaciones Principal-Detalle (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
En los pasos siguientes se asume que dispone de una base de datos de SQL Server Mobile o SQL Server Compact Edition con
relaciones de tablas disponibles en la ventana Orígenes de datos. Para obtener más información, consulte Cómo: Crear una
base de datos (Dispositivos).
Al arrastrar las tablas de detalles, considere el arrastrar únicamente las columnas que sirven para su propósito en lugar de la
cuadrícula completa. Para ello, haga clic en la flecha situada a la derecha del nombre de la tabla.
En los procedimientos siguientes se asume que tiene un proyecto de dispositivo abierto y un origen de datos configurado.
Para crear una aplicación principal-detalle
1. Arrastre la tabla principal desde la ventana Orígenes de datos al formulario del diseñador.
2. En la ventana Orígenes de datos, expanda la tabla principal para exponer la tabla de detalles.
3. Arrastre la tabla de detalles situada debajo del nodo de tabla principal hasta el formulario.
Nota
Esta es la tabla de detalles que aparece en la tabla principal y no la tabla de detalles que se encuentra al mismo nivel en
el árbol que la tabla principal.

El diseñador detecta automáticamente la relación principal-detalle a partir de las restricciones FOREIGN KEY. Para
obtener más información, consulte Tutorial: Aplicación Principal-Detalle para una base de datos.
4. Ajuste los controles en el formulario para adaptarlos a su aplicación.
Vea también
Tareas
Tutorial: Aplicación Principal-Detalle para una base de datos
Cómo: Instalar bases de datos de ejemplo
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Crear consultas parametrizadas (Dispositivos)


Este tema se ha actualizado para Visual Studio 2005 SP1.
Los procedimientos siguientes se han actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile o SQL Server Compact Edition
en la ventana Orígenes de datos. Para obtener más información, vea Cómo: Crear una base de datos (Dispositivos) o Cómo:
Agregar una base de datos a un proyecto de dispositivos.
Si se desea que los usuarios puedan escribir diferentes valores para un parámetro, utilice una interrogación ("?") como
parámetro a la hora de diseñar la consulta en cuestión. Si se crea la consulta utilizando la etiqueta inteligente en el diseñador
de Windows Forms, tal y como se muestra en los siguientes pasos, se generará automáticamente una interfaz de usuario en el
formulario Windows Forms. Si se crea una consulta en el TableAdapter del Diseñador de Dataset, tal y como se muestra en
los últimos pasos, no se genera automáticamente ninguna interfaz de usuario.
Para establecer la especificación de un parámetro utilizando el Diseñador de Windows Forms
1. Arrastre una tabla en formato Datagrid o Details desde la ventana Orígenes de datos hasta el formulario en el
diseñador.
Puede seleccionar el formato haciendo clic en la flecha situada a la derecha del nombre de la tabla.
2. Haga clic en la etiqueta inteligente en el componente arrastrado y, a continuación, en el menú contextual, haga clic en
Agregar consulta.
Si no utiliza un mouse, el método abreviado de teclado para abrir el cuadro de diálogo Tareas es Mayús+Alt+F10.
3. En el cuadro de diálogo Generador de criterios de búsqueda, seleccione Nuevo nombre de consulta.
Utilice el nombre predeterminado o cree un nombre de su elección.
4. Puede especificar los parámetros ahora cambiando la instrucción SQL en el cuadro Texto de la consulta o haciendo clic
en Generador de consultas.
Para especificar un parámetro mediante el cuadro Texto de la consulta
1. Agregar una cláusula WHERE al final de la instrucción SELECT.
2. Haga clic en Aceptar para cerrar el cuadro de diálogo Generador de criterios de búsqueda.
Se muestra un botón con enlace a consultas en el formulario del diseñador.
Para especificar un parámetro mediante el Generador de consultas
1. En el cuadro de diálogo Generador de consultas:
Agregue una cláusula WHERE en el Panel de instrucciones SQL.
O bien
Escriba el parámetro en Filtro, en la Columna adecuada.
Este enfoque escribe la cláusula WHERE de manera automática en el panel Instrucción SQL.
2. Haga clic en Aceptar para cerrar el cuadro de diálogo Generador de consultas.
3. Haga clic en Aceptar para cerrar el cuadro de diálogo Generador de criterios de búsqueda.
Se muestra un botón con enlace a consultas en el formulario del diseñador.
Para especificar un parámetro utilizando el Diseñador de Dataset
1. En Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo .xsd y, a continuación, haga clic
en Abrir.
2. En el Diseñador de Dataset, haga clic con el botón secundario del mouse en TableAdapter, señale Agregar y, a
continuación, en el menú contextual, haga clic en Consulta.
3. En el Asistente para configuración de consultas de TableAdapter, seleccione Usar instrucciones SQL y, a continuación,
haga clic en Siguiente.
4. En la página Elija un tipo de consulta, seleccione SELECT que devuelve un solo valor y, a continuación, haga clic en
Siguiente.
5. En la página Especifique una instrucción SELECT de SQL, haga clic en Generador de consultas.
Si lo desea, es posible agregar la cláusula WHERE aquí.
6. Utilice el Generador de consultas tal y como se describe más arriba en este tema.
Nota
No se genera automáticamente ningún elemento de interfaz de usuario al crear consultas utilizando el Asistente para
configuración de consultas de TableAdapter.

Vea también
Tareas
Cómo: Agregar una consulta parametrizada a un formulario en una aplicación para Windows
Tutorial: Aplicación de consulta parametrizada
Cómo: Instalar bases de datos de ejemplo
Referencia
Generador de criterios de búsqueda (cuadro de diálogo)
Conceptos
Herramientas de diseño de consultas y vistas
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Generar código SqlCeResultSet (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
La sección siguiente se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Mobile o Microsoft SQL Server 2005 Compact
Edition en la ventana Orígenes de datos. Para obtener más información, vea Cómo: Crear una base de datos (Dispositivos) o
Cómo: Agregar una base de datos a un proyecto de dispositivos.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
En un proyecto de dispositivos, Visual Studio sólo genera de manera predeterminada código para un conjunto de datos. Es
posible cambiar este valor predeterminado para generar un conjunto de resultados, o para generar ambos. Para obtener más
información sobre las diferencias entre los dos tipos, vea Conjuntos de resultados y conjuntos de datos (Dispositivos).
Las opciones ResultSet y ResultSet/DataSet sólo se admiten para archivos .xsd creados con conexiones de SQL Server Mobile o
SQL Server Compact Edition. La opción de conjunto de datos se admite para todas las conexiones y es el código generado de
manera predeterminada.
Nota
Si desea convertir una aplicación de conjunto de datos existente en una aplicación de conjunto de resultados, establezca la pr
opiedad Custom Tool en MSDataSetResultSetGenerator. Esta configuración genera ambos tipos de clases de acceso a dat
os. Llegados a tal punto, es posible migrar código de una clase a otra sin errores de generación. Tras migrar el código, establ
ezca la propiedad Custom Tool en MSResultSetGenerator. Vuelva a realizar la generación para confirmar que todo el uso
de conjuntos de datos ha sido eliminado del código.

Para generar código sólo para conjuntos de resultados


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo de base de datos .xsd y, a
continuación, haga clic en Propiedades en el menú contextual.
2. Establezca el valor Herramienta personalizada en MSResultSetGenerator.
3. Vuelva a generar la solución.
Para generar sólo código para conjuntos de datos
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo de base de datos .xsd y, a
continuación, haga clic en Propiedades en el menú contextual.
2. Establezca el valor Herramienta personalizada en MSDataSetGenerator.
Éste es el valor predeterminado.
3. Vuelva a generar la solución.
Para generar código para conjuntos de resultados y conjuntos de datos
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo de base de datos .xsd y, a
continuación, haga clic en Propiedades en el menú contextual.
2. Establezca el valor Herramienta personalizada en MSDataSetResultSetGenerator.
3. Vuelva a generar la solución.
Vea también
Tareas
Cómo: Instalar bases de datos de ejemplo
Conceptos
Conjuntos de resultados y conjuntos de datos (Dispositivos)
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Generar vistas de resumen y edición para aplicaciones de


datos (Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Utilice formularios de datos para ver y modificar filas únicas de datos en una cuadrícula de datos.
La interfaz de usuario de los formularios de datos consta de dos cuadros de diálogo: Ver, que muestra una vista resumida de la
fila seleccionada en una cuadrícula de datos, y Editar, que permite modificar la fila.
Para abrir el cuadro de diálogo Ver en una aplicación en ejecución, haga doble clic en una fila de la cuadrícula de datos
en el emulador de dispositivos o puntee una fila en un dispositivo.
Para abrir el cuadro de diálogo Editar, haga clic (puntee) en Nuevo cuando se muestre la retícula de datos (esta acción
crea una nueva fila en la retícula de datos) o haga clic (puntee) en Editar cuando se muestra el cuadro de diálogo Ver.
Los formularios de datos están diseñados como plantillas para permitir su personalización. Se debe agregar el código
apropiado para validar y confirmar los cambios en la base de datos como parte de esta personalización.
Los cambios realizados mediante los formularios de datos no se conservan en la base de datos. Para obtener más información
sobre cómo conservar estos cambios, consulte Cómo: Conservar cambios de datos en la base de datos (Dispositivos).
Nota
Esta característica sólo se admite para orígenes de datos creados en SQL Server Mobile, SQL Server Compact Edition y conju
ntos de datos de servidor de base de datos. No se admite para conjuntos de resultados, objetos comerciales ni servicios Web.

El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.


La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile o SQL Server Compact Edition
en la ventana Orígenes de datos. Para obtener más información, consulte Cómo: Crear una base de datos (Dispositivos). En
este tema se describe también cómo agregar una base de datos de SQL Server existente como origen de datos al proyecto.
Para generar los formularios de datos
1. Arrastre una tabla en formato de retícula de datos desde la ventana Orígenes de datos hasta el formulario, en el
diseñador.
Puede seleccionar el formato haciendo clic en la flecha situada a la derecha del nombre de la tabla.
2. Haga clic en la etiqueta inteligente del componente arrastrado y, a continuación, en el menú contextual, seleccione
Generar formularios de datos. (Si no utiliza un mouse, el método abreviado de teclado para abrir el cuadro de diálogo
Tareas es Mayús+Alt+F10.=
Nota
Los cuadros de diálogo se muestran brevemente a medida que se generan en el diseñador. Para comprobar que los cu
adros de diálogo forman parte del proyecto, búsquelos en el Explorador de soluciones.

Para modificar los datos en una aplicación en ejecución


1. Inicie la aplicación de los datos.
Aparece la retícula de datos, llena de datos.
2. Haga doble clic en una fila de datos.
Aparece una vista resumida de la fila en el cuadro de diálogo Ver. Esta vista está compuesto por una etiqueta y por datos
para cada columna con contenido. Es decir, el cuadro de diálogo Ver oculta cualquier columna cuyo valor sea DBNULL.
3. En el menú principal, haga clic en Editar para abrir el cuadro de diálogo Editar.
Utilice el cuadro de diálogo Editar, que muestra todas las columnas, para modificar los datos y, a continuación, haga clic
en Aceptar.
Los datos revisados se muestran en la retícula de datos.
Para crear una nueva fila en la retícula de datos en una aplicación en ejecución
1. Con una retícula de datos abierta, en el menú principal, haga clic en Nuevo.
Aparecerá el cuadro de diálogo Editar. Utilícelo para agregar una nueva fila de datos.
2. Haga clic en Aceptar.
La nueva fila se agregará a la retícula de datos.
Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Administrar columnas en una base de datos


(Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Mobile o Microsoft SQL Server 2005 Compact
Edition en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para agregar una columna
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos para mostrar sus tablas.
3. Haga clic con el botón secundario en la tabla a la que desea agregar una columna y, a continuación, haga clic en Editar
esquema de tabla en el menú contextual.
4. En la ventana Editar tabla, agregue la columna y sus propiedades y, a continuación, haga clic en Aceptar.
Para editar propiedades de columna
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos para mostrar sus tablas.
3. Haga clic con el botón secundario del mouse en la tabla que contiene la columna cuyas propiedades se desean modificar
y, a continuación, haga clic en Editar esquema de tabla en el menú contextual.
4. Realice las modificaciones y, a continuación, haga clic en Aceptar.
Nota
No se puede realizar ninguna modificación que no respete la integridad referencial (por ejemplo, intentar cambiar la pr
opiedad Clave principal a No cuando otra restricción hace referencia a esa columna).

Para quitar una columna de una tabla


1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos para mostrar sus tablas.
3. Haga clic con el botón secundario en la tabla de la que desea quitar la columna y, a continuación, haga clic en Editar
esquema de tabla en el menú contextual.
4. En la ventana Modificar tabla, seleccione la columna que desee eliminar, haga clic en Eliminar y, a continuación, haga
clic en Aceptar.
Nota
No se puede quitar una columna hasta que se hayan eliminado todas las referencias a dicha columna.

Vea también
Tareas
Cómo: Instalar bases de datos de ejemplo
Otros recursos
Column Properties
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Administrar contraseñas para bases de datos


(Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Es posible establecer una contraseña al crear una base de datos y cambiar dicha contraseña en una base de datos existente.
Nota de seguridad
La inclusión de una contraseña en una cadena de conexión representa un riesgo para la seguridad. Para obtener más inform
ación, consulte Securing Databases (SQL Server Mobile).

En los siguientes pasos de ejemplo se da por hecho que hay una aplicación de formularios Windows Forms de Pocket PC
abierta.
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para establecer una contraseña al crear una base de datos
1. En el menú Datos, haga clic en Agregar nuevo origen de datos.
2. En la página Elegir un tipo de origen de datos, haga clic en Base de datos y luego en Siguiente.
3. En la página Elegir la conexión de datos, haga clic en Nueva conexión para abrir el cuadro de diálogo Agregar
conexión.
4. Haga clic sucesivamente en Cambiar, Microsoft SQL Server Mobile Edition y Aceptar.
O bien
Haga clic sucesivamente en Cambiar, Microsoft SQL Server Compact Edition y Aceptar.
5. En el cuadro de diálogo Agregar conexión, haga clic en Mi PC.
6. Haga clic en Crear.
7. En el cuadro de diálogo Crear base de datos de SQL Server 2005 Mobile Edition, escriba la ruta completa de la nueva
base de datos (por ejemplo, c:\MiBaseDeDatos.sdf).
O bien
En el cuadro de diálogo Crear base de datos de Microsoft SQL Server Compact Edition, escriba la ruta completa de
la nueva base de datos (por ejemplo, c:\MiBaseDeDatos.sdf).
8. En los cuadros Contraseña nueva y Confirmar contraseña, escriba una contraseña para la nueva base de datos y, a
continuación, haga clic en Aceptar.
Para cambiar una contraseña en una base de datos existente
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, haga clic con el botón secundario del mouse en el origen de datos cuya
contraseña desea cambiar.
3. En el menú contextual, haga clic en Propiedades de la base de datos.
4. En el cuadro de diálogo Propiedades de la base de datos, haga clic en Establecer contraseña.
5. Escriba las contraseñas anterior y nueva y, a continuación, haga clic en Aceptar.
Vea también
Tareas
Cómo: Crear una base de datos (Dispositivos)
Otros recursos
Securing Databases (SQL Server Mobile)
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Obtener una vista previa de datos en una base de datos


(Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Los procedimientos siguientes se han actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile o SQL Server Compact Edition
en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
Puede ofrecer una vista previa de los datos fuera de un proyecto con el Explorador de servidores, o desde dentro, desde la
ventana Orígenes de datos, donde también puede parametrizar la consulta que genera la vista. Para obtener más
información, consulte Cómo: Crear consultas parametrizadas (Dispositivos).
Para ver datos mediante el Explorador de servidores
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos para exponer la lista de tablas.
3. Haga clic con el botón secundario del mouse en la tabla cuyos datos desea ver y, a continuación, en el menú contextual,
haga clic en Abrir.
Para ver datos desde la ventana Orígenes de datos en un proyecto
1. En el menú Datos, haga clic en Mostrar orígenes de datos.
2. En la ventana Orígenes de datos, haga clic con el botón secundario del mouse en el origen de datos cuyos datos desea
ver (por ejemplo, una tabla).
3. En el menú contextual, haga clic en Vista previa de datos.
4. En el cuadro de diálogo Vista previa de los datos, haga clic en Vista previa.

Para ver datos utilizando la etiqueta inteligente del control DataGrid


1. En el diseñador, haga clic en la etiqueta inteligente del control DataGrid.
2. En el menú contextual Tareas de DataGrid, haga clic en Vista previa de datos.
3. En el cuadro de diálogo Vista previa de datos, seleccione el objeto del que desea obtener una vista previa y, a
continuación, haga clic en Vista previa.
Los datos aparecen en el cuadro Resultados. El número de columnas y filas de la cuadrícula también parece en la parte
inferior del cuadro de diálogo Vista previa de datos.

Vea también
Tareas
Cómo: Instalar bases de datos de ejemplo
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Agregar una base de datos a un proyecto de dispositivos


Este tema se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile Edition o SQL Server Compact
Edition en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para agregar una base de datos de SQL Server Mobile Edition o SQL Server Compact Edition como
origen de datos
1. Con un proyecto para Smart Device abierto, haga clic en Agregar nuevo origen de datos en el menú Datos.
2. En la página Elegir un tipo de origen de datos, seleccione Base de datos y, a continuación, haga clic en Siguiente.
3. En la página Elegir la conexión de datos, seleccione la cadena de la conexión de datos que contiene el nombre de la
base de datos y, a continuación, haga clic en Siguiente.
Esta conexión debería aparecer en el cuadro desplegable si la base de datos ya está disponible en el Explorador de
servidores. Si la conexión a la base de datos no aparece en la lista, haga clic en Nueva conexión para abrir el cuadro de
diálogo Agregar conexión, haga clic en Examinar para abrir el cuadro de diálogo Seleccionar archivo de base de
datos, desplácese por la base de datos y, a continuación, haga clic en Abrir. A continuación, haga clic en Aceptar para
cerrar el cuadro de diálogo Agregar conexión.
4. En la página Elegir la conexión de datos, haga clic en Siguiente.
Aparece el cuadro de mensaje Archivo de base de datos local, que pregunta si desea incluir un determinado archivo
de datos en el proyecto actual.
Haga clic en Sí.
5. En la página Elija los objetos de base de datos, seleccione los objetos que desea utilizar como orígenes de datos en el
proyecto.
6. Haga clic en Finalizar.
Los objetos seleccionados en la base de datos de SQL Server Mobile o SQL Server Compact Edition aparecen como
orígenes de datos del proyecto en cuestión en la ventana Orígenes de datos. Para abrir la ventana, haga clic en Mostrar
orígenes de datos en el menú Datos.
Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Reducir y reparar una base de datos (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile Edition o SQL Server Compact
Edition en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para reducir y reparar una base de datos
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, haga clic con el botón secundario del mouse en la conexión de datos que
desea reducir y reparar y, a continuación, haga clic en Propiedades de la base de datos en el menú contextual.
3. En el panel Seleccionar página, haga clic en Reducir y reparar.
4. Elija entre las opciones de la página Reducir y reparar.
La parte inferior de la página muestra una explicación de la opción selecciona.
5. Haga clic en Aceptar para iniciar la opción seleccionada o haga clic en Cancelar para mantener la base de datos en su
estado actual.
Vea también
Otros recursos
Shrink & Repair
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Administrar tablas en una base de datos (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile Edition o SQL Server Compact
Edition en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para agregar una tabla
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos a la que desee agregar una tabla.
3. Haga clic con el botón secundario del mouse en Tablas y, a continuación, en Crear tabla.
4. En el cuadro de diálogo Nueva tabla, escriba un nombre de tabla en el cuadro Nombre.
5. Para la primera columna, escriba valores para Nombre de columna, Tipo de datos, Longitud, Permitir valores
nulos, Único y Clave principal. Continúe con las columnas adicionales.
6. Haga clic en Aceptar.
La nueva tabla se muestra en la lista de tablas para la conexión de datos.
Para modificar un esquema de tabla existente
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos en la que se encuentra el esquema de tabla que
se va a modificar.
3. Haga clic con el botón secundario del mouse en la tabla que se va a modificar y, en el menú contextual, haga clic en
Editar esquema de tabla.
4. En el cuadro de diálogo Editar tabla <Nombre de tabla>, realice los cambios y, a continuación, haga clic en Aceptar.
Para quitar una tabla
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos de la que desee quitar una tabla.
3. En Tablas, haga clic con el botón secundario del mouse en la tabla que desee eliminar y, en el menú contextual, haga clic
en Colocar tabla.
4. En el cuadro de diálogo Eliminar objetos, haga clic en Quitar y, a continuación, en Aceptar.
Nota
No se puede quitar una tabla hasta que se hayan borrado todas las referencias a dicha tabla.

Vea también
Otros recursos
New Table
Edit Table (SQL Server Mobile)
Table Properties
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Administrar índices en una base de datos (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
En los pasos siguientes se supone que hay disponible una base de datos de SQL Server Mobile Edition o SQL Server Compact
Edition en la ventana Explorador de servidores. Para obtener más información, consulte Cómo: Crear una base de datos
(Dispositivos).
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para crear un índice para una base de datos de SQL Server Mobile Edition o SQL Server Compact
Edition
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda el origen de datos en el que desea crear un nuevo índice.
3. Expanda la tabla para la que desea crear el nuevo índice y, a continuación, haga clic con el botón secundario del mouse
en la carpeta Índices.
4. En el menú contextual, haga clic en Crear índice.
5. En el cuadro de diálogo Nuevo índice, escriba un nombre para el índice y, a continuación, haga clic en Agregar.
6. En el cuadro de diálogo Seleccionar columnas en <Tabla>, seleccione las columnas que se van agregarán a la clave de
índice y, a continuación, haga clic en Aceptar.
7. Haga clic en Aceptar para cerrar el cuadro de diálogo Nuevo índice.
Para modificar propiedades de índice atendiendo sólo a un criterio de ordenación
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos y la tabla que contiene el índice cuyas
propiedades desea modificar.
3. Haga clic con el botón secundario del mouse en el índice y, a continuación, haga clic en Propiedades del índice en el
menú contextual.
4. Es posible cambiar el criterio de ordenación en este cuadro de diálogo.
No se pueden cambiar otras propiedades de índice a no ser que se reemplace el índice existente por uno nuevo.
Para borrar un índice de una base de datos de SQL Server Mobile Edition o SQL Server Compact Edition
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, expanda la conexión de datos de la que desee quitar un índice.
3. Expanda la tabla que tiene el índice, expanda Índices y, a continuación, haga clic con el botón secundario del mouse en el
índice que se va a quitar.
4. En el menú contextual, haga clic en Colocar índice.
5. En el cuadro de diálogo Eliminar objetos, haga clic en Quitar y, a continuación, en Aceptar.
Vea también
Otros recursos
New Index
Index Properties (SQL Server Mobile)
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Agregar botones de exploración (Dispositivos)


Utilice estos procedimientos para proporcionar botones de desplazamiento para ver distintas filas del origen de datos. Esta
técnica soluciona la falta de compatibilidad de .NET Compact Framework con la clase DataNavigator de .NET Framework.
En los pasos siguientes, escritos en C# y basados en la tabla Customers de la base de datos Northwind (versión en inglés de
Northwind), se supone que hay un conjunto de datos o un conjunto de resultados en la ventana Orígenes de datos. Para
obtener más información, vea Cómo: Agregar una base de datos a un proyecto de dispositivos. En un proyecto real, se incluiría
una comprobación de límites, que no se muestra en este código de ejemplo.
Para preparar la incorporación de los botones de desplazamiento
1. Arrastre una tabla desde la ventana Orígenes de datos hasta un formulario Windows Forms.
2. Arrastre y coloque un botón en el formulario.
3. Establezca la propiedad Text del botón de forma apropiada (por ejemplo, "Next").
4. Haga doble clic en el botón del formulario para abrir el editor de código en el controlador de eventos Clic del botón.
5. Utilice los ejemplos de código siguientes para los controladores de eventos de los botones Primero, Siguiente,
Anterior y Último.
Para programar un botón Primero
Escriba this.customersBindingSource.MoveFirst();

Para programar un botón Siguiente


Escriba this.customersBindingSource.MoveNext();

Para programar un botón Anterior


Escriba this.customersBindingSource.MovePrevious();

Para programar un botón Último


Escriba this.customersBindingSource.MoveLast();

Vea también
Tareas
Cómo: Generar código SqlCeResultSet (Dispositivos)
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Conservar cambios de datos en la base de datos


(Dispositivos)
Utilice estos procedimientos para conservar las modificaciones realizadas en los datos en proyectos de dispositivos.
En los pasos siguientes, escritos en C# y basados en la tabla Customers de la base de datos Northwind (versión en inglés de
Northwind), se supone que dispone de un conjunto de datos (ningún otro tipo de origen de datos) en la ventana Orígenes de
datos. Para obtener más información, vea Cómo: Agregar una base de datos a un proyecto de dispositivos.
Para conservar los cambios de datos en la base de datos
1. Arrastre una tabla desde la ventana Orígenes de datos hasta un formulario Windows Forms.
2. Arrastre un botón al formulario.
3. Cambie el valor de la propiedad Text del botón a Guardar.
4. Haga doble clic en el botón del formulario para abrir el editor de código en el controlador del evento Click del botón.
5. Escriba el código siguiente:

this.customersBindingSource.EndEdit();
this.customersTableAdapter.Update(this.northwindDataSet.
Customers);

Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Cambiar la cadena de conexión en tiempo de diseño


(Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
De forma predeterminada, se crea una cadena de conexión en tiempo de diseño al crear un origen de datos de SQL Server
Mobile Edition o SQL Server Compact Edition para un proyecto determinado. Visual Studio utiliza esta cadena para conectarse
a la base de datos en tiempo de diseño con el fin de recuperar información sobre un esquema determinado. A lo largo del
desarrollo del proyecto, puede que desee cambiar esta cadena.
Nota de seguridad
La inclusión de una contraseña en una cadena de conexión representa un riesgo para la seguridad. Para obtener más inform
ación, consulte Securing Databases (SQL Server Mobile).

Nota
Hay que distingue entre esta cadena y la cadena de conexión en tiempo de ejecución. Para obtener más información, consult
e Propiedad Cadena de conexión, cuadro de diálogo Propiedades de archivo (Dispositivos).

El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.


La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)

Para cambiar la cadena de conexión en tiempo de diseño


1. En el Explorador de soluciones, haga doble clic en el archivo .xsd para abrir el Diseñador de DataSet.
2. Haga clic con el botón secundario del mouse en TableAdapter y, a continuación, haga clic en el menú contextual
Propiedades.
3. Expanda la propiedad Connection.
4. Escriba un nuevo valor para ConnectionString.

Vea también
Tareas
Cómo: Editar una cadena de conexión
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Cambiar la cadena de conexión en tiempo de ejecución


(Dispositivos)
Al agregar un origen de datos a un proyecto, se genera una cadena de conexión en el archivo .xsd. Esta cadena es considerada
una cadena de conexión en tiempo de diseño, adecuada para conectar Visual Studio al origen de datos en tiempo de diseño.
Esta misma cadena de conexión actúa como la cadena de conexión predeterminada en tiempo de ejecución.
En caso de que, cuando se ejecute la aplicación en un dispositivo, sea necesaria una cadena de conexión diferente, será posible
especificar la cadena en tiempo de ejecución realizando los siguientes pasos. Para obtener más información, vea Propiedad
Cadena de conexión, cuadro de diálogo Propiedades de archivo (Dispositivos).
Nota de seguridad
La inclusión de una contraseña en una cadena de conexión representa un riesgo para la seguridad. Para obtener más inform
ación, vea Securing Databases (SQL Server Mobile).

Para cambiar la cadena de conexión en tiempo de ejecución


1. En el Explorador de soluciones, seleccione el archivo .xsd.
2. En el menú Ver, haga clic en Ventana Propiedades.
3. Escriba una cadena de conexión en tiempo de ejecución para la propiedad Cadena de conexión.
Vea también
Tareas
Cómo: Cambiar la cadena de conexión en tiempo de diseño (Dispositivos)
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Agregar un objeto comercial como origen de datos


(Dispositivos)
Puede agregar un objeto comercial como un origen de datos en sus proyectos para dispositivos inteligentes. Para obtener más
información, vea Visual Database Tools.
Para crear un nuevo origen de datos a partir de un objeto
1. En el menú Datos, haga clic en Agregar nuevo elemento.
2. En la página Elegir un tipo de origen de datos, seleccione Objeto.
3. En la página Seleccione un objeto que desee enlazar a, seleccione un objeto que ya esté en su aplicación.
Nota
Puede que necesite generar el proyecto que contiene el objeto antes de que éste aparezca en el asistente. También pue
de agregar una referencia a un objeto que actualmente no se encuentre en la aplicación haciendo clic en Agregar refer
encia y ubicando el ensamblado deseado en el Agregar referencia (Cuadro de diálogo). El ensamblado se agrega a la v
ista de árbol.

4. Expanda el ensamblado que contiene el objeto que desea enlazar y, a continuación, seleccione el objeto en la vista de
árbol.
5. Haga clic en Finalizar.
El origen de datos se agrega a la ventana Orígenes de datos.
Para agregar un origen de datos a un formulario
1. En el menú Datos, haga clic en Mostrar orígenes de datos para abrir la ventana Orígenes de datos.
2. Seleccione elementos en la ventana Orígenes de datos y arrástrelos hasta un formulario Windows Forms para crear
controles enlazados a las propiedades del objeto. Para obtener más información, vea Información general sobre la
presentación de datos.
Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Agregar un servicio Web como origen de datos


(Dispositivos)
Puede agregar un servicio Web como un origen de datos en sus proyectos para dispositivos inteligentes.
Para conectar la aplicación a un servicio Web
1. En el menú Datos, haga clic en Agregar nuevo elemento.
2. En la página Elegir un tipo de origen de datos, seleccione Servicio Web y, a continuación, haga clic en Siguiente.
3. Agregue una referencia al servicio Web deseado mediante el Agregar referencia Web (Cuadro de diálogo).
4. Haga clic en Finalizar.
El origen de datos se agrega a la ventana Orígenes de datos.
Para agregar un origen de datos a un formulario
Seleccione elementos en la ventana Orígenes de datos y arrástrelos al formulario Windows Forms para crear controles
enlazados. Para obtener más información, vea Información general sobre la presentación de datos.
Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Agregar una base de datos de SQL Server como origen


de datos (Dispositivos)
Puede utilizar las bases de datos de SQL Server como orígenes de datos en los proyectos de dispositivos administrados.
Para agregar una conexión de datos de SQL Server al Explorador de servidores
1. En el menú Ver, haga clic en Explorador de servidores.
2. En la ventana Explorador de servidores, haga clic con el botón secundario del mouse en Conexiones de datos y, a
continuación, haga clic en Agregar conexión en el menú contextual.
3. En el cuadro de diálogo Agregar conexión, haga clic en Cambiar.
4. En el cuadro de diálogo Cambiar origen de datos, seleccione Microsoft SQL Servery, a continuación, haga clic en
Aceptar para volver a abrir el cuadro de diálogo Agregar conexión.
5. En el cuadro Nombre de servidor, especifique el nombre del servidor en el que se encuentra el origen de datos.
6. Inicie sesión en el servidor.
Si el servidor utiliza autenticación de SQL Server, es necesario proporcionar un nombre de usuario y una contraseña.
7. En el cuadro Seleccionar o escribir nombre de base de datos, seleccione o escriba el nombre de la base de datos y, a
continuación, haga clic en Aceptar.
La nueva conexión de datos se muestra en el Explorador de servidores.
Para utilizar una conexión de datos de SQL Server como origen de datos en un proyecto
1. Requisito previo: debe tener un proyecto para Smart Device de .NET Compact Framework ya abierto en el IDE de Visual
Studio.
2. En el menú Datos, haga clic en Agregar nuevo origen de datos para abrir el Asistente para la configuración de
orígenes de datos.
3. En la página Elegir un tipo de origen de datos, seleccione Base de datos y, a continuación, haga clic en Siguiente.
4. En la página Elegir la conexión de datos, haga clic en Nueva conexión.
5. En el cuadro de diálogo Agregar conexión, haga clic en Cambiar.
6. En el cuadro de diálogo Cambiar origen de datos, seleccione Microsoft SQL Servery, a continuación, haga clic en
Aceptar para volver a abrir el cuadro de diálogo Agregar conexión.
7. En el cuadro Nombre de servidor, escriba o seleccione el nombre del servidor en el que se encuentra el origen de datos.
8. Inicie sesión en el servidor.
Si el servidor utiliza autenticación de SQL Server, es necesario proporcionar un nombre de usuario y una contraseña.
9. En el cuadro Seleccionar o escribir nombre de base de datos, seleccione o escriba el nombre de la base de datos y, a
continuación, haga clic en Aceptar.
10. En la página Elegir la conexión de datos, elija excluir datos confidenciales de la cadena de conexión y, a continuación,
haga clic en Siguiente.
Nota de seguridad
Incluir datos confidenciales en la cadena de conexión supone un riesgo de seguridad.

11. En la página Elija los objetos de base de datos, seleccione los objetos que desee utilizar como orígenes de datos y, a
continuación, haga clic en Finalizar.
La conexión de datos aparece ahora como un origen de datos en la ventana Orígenes de datos.
Vea también
Otros recursos
Administrar orígenes de datos en proyectos de dispositivos
Desarrollo para Smart Device

Tutorial: Crear una aplicación simple


Este tutorial muestra cómo utilizar Visual Studio 2005 para crear un proyecto de dispositivo inteligente simple mediante Visual
C# o Visual Basic. El tutorial también muestra cómo ejecutar la aplicación en su PC en el emulador o en un dispositivo real
conectado a su PC.
Nota
Para instalar de forma permanente una aplicación terminada en un dispositivo real, debe empaquetarla primero en un archiv
o CAB. Para obtener más información, vea Tutorial: Empaquetar una solución Smart Device para su implementación.

Nota
Las opciones disponibles en los cuadros de diálogo y los comandos de menú difieren en función de la configuración de desa
rrollo. Para escribir el tutorial se utilizó la configuración de desarrollo de Visual Basic y la configuración de desarrollo de Visu
al C#. Para ver o cambiar su configuración, elija Importar y exportar configuraciones en el menú Herramientas, haga clic
en Restablecer configuración del IDE, seleccione la configuración que desee y, a continuación, haga clic en Restablecer c
onfiguración.

El tutorial consta de cuatro tareas principales:


Seleccionar un dispositivo de destino.
Crear un proyecto de dispositivos.
Agregar un botón y un controlador de eventos al formulario.
Ejecutar la aplicación en el dispositivo de destino.
Seleccionar un dispositivo de destino
El dispositivo de destino de este tutorial puede ser un dispositivo físico o un emulador. Incluso puede alternar entre estos dos
dispositivos durante el tutorial. Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un
dispositivo cada vez que implemente la solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General. Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte
inferior del cuadro de diálogo Opciones.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Crear un proyecto de dispositivo
En esta sección, se genera una aplicación de Windows Forms simple. En los procedimientos siguientes se explica cómo crear
un proyecto de formularios Windows Forms, agregar un control al formulario, agregar controladores de eventos al control y,
por último, generar y probar la aplicación. No se incluyen los pasos para crear un proyecto de C++. Si desarrolla en C++, cree
una aplicación básica "Hola a todos", genere una versión de lanzamiento y vaya a la sección "Para generar, probar y guardar la
aplicación".
Para crear un proyecto para dispositivos
1. (Visual Basic) En el menú Archivo de Visual Studio, haga clic en Nuevo proyecto.
O bien
(Visual C#) En el menú Archivo de Visual Studio, señale a Nuevo y haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Visual Basic o Visual C#, expanda
Dispositivo inteligente y, a continuación, haga clic en Pocket PC 2003.
Si el idioma que desea no aparece al principio, expanda Otros lenguajes. Su configuración de perfil rige esta pantalla.
3. En Plantillas, haga doble clic en Aplicación de dispositivo.
4. En el cuadro Nombre, escriba AppForDeployment.
5. (Visual C# sólo) En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.
6. Haga clic en Aceptar.
Una representación de un dispositivo Pocket PC aparece en el Diseñador de Windows Forms.
Para agregar un control al formulario
1. En el Cuadro de herramientas, arrastre un control Button al formulario.
Si el Cuadro de herramientas no está visible, haga clic en Cuadro de herramientas en el menú Ver.
Si la ficha Controles de dispositivo no está visible en el Cuadro de herramientas, haga clic con el botón secundario
en el Cuadro de herramientas y seleccione Mostrar todo o Restablecer cuadro de herramientas.
2. Haga clic con el botón secundario en el control Botón y seleccione Propiedades.
3. En la ventana Propiedades, escriba Say Hello y presione ENTRAR para establecer la propiedad Texto.
Para agregar control de eventos al control Button
1. Haga doble clic en el botón del formulario.
Se abrirá el Editor de código, con el punto de inserción en el controlador de eventos.
2. Inserte el siguiente código de Visual Basic:

MessageBox.Show("Hello, World!")

— o bien —
Inserte el código siguiente de C#:

MessageBox.Show("Hello, World!");

Para generar, probar y guardar la aplicación


1. En el menú Depurar, haga clic en Iniciar.
2. En el cuadro de diálogo Implementar, seleccione Pocket PC 2003 SE - Emulador y haga clic en Implementar.
Los mensajes de progreso aparecen en la ventana Resultados, en la barra de Estado y la pantalla del emulador.
3. Cuando ejecute la aplicación en el emulador, toque en el botón Say Hello para verificar que aparece el mensaje "Hola a
todos".
4. En menú Archivo del emulador, haga clic en Salir para cerrar el emulador antes de pasar a la sección siguiente del
tutorial.
5. En el cuadro de diálogo Emulador de dispositivos, haga clic en No en respuesta al mensaje Guardar estado antes de
salir.
6. En el menú Archivo de Visual Studio, haga clic en Guardar todo.
Si el emulador no se ha cerrado completamente, aparece el mensaje ¿Desea detener la depuración?. Haga clic en Sí.
7. En el cuadro de diálogo Guardar proyecto, guarde el proyecto AppForDeployment en una ubicación de su elección.
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Desarrollo para Smart Device

Programar para dispositivos con Visual C++


Visual Studio 2005 proporciona la compatibilidad para desarrollar las aplicaciones de dispositivos con Visual C++.
En esta sección
Lo nuevo en el desarrollo de aplicaciones de dispositivos de Visual C++
Proporciona información sobre las nuevas características de Visual C++ para dispositivos.
Crear y trasladar proyectos de dispositivos de Visual C++
Explica cómo crear un nuevo proyecto de dispositivo de Visual C++ y cómo trasladar los proyectos existentes de escritorio
de Visual C++ y Visual C++ 4.0 incrustado a proyectos de dispositivo de Visual C++.
Desarrollar proyectos de dispositivos de Visual C++
Describe cómo utilizar las características de Visual Studio 2005 para desarrollar una aplicación para dispositivos utilizando
Visual C++.
Generar y depurar proyectos de dispositivos de Visual C++
Explica cómo generar y depurar un proyecto de dispositivos de Visual C++.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Lo nuevo en el desarrollo de aplicaciones de dispositivos de


Visual C++
Visual Studio 2005 incluye el desarrollo de dispositivos en Visual C++. Anteriormente, para programar proyectos de
dispositivos con Visual C++, se necesitaba una versión incrustada. Las nuevas funciones descritas en las secciones siguientes
suponen mejoras con respecto a la versión incrustada de Visual C++.
Entorno de desarrollo integrado (IDE)
Compatibilidad con varios sistemas operativos
El conjunto de herramientas Visual Studio 2005 ofrece compatibilidad para Pocket PC 2003, Smartphone 2003, SDK basados
en Windows CE 5.0 y futuras versiones de SDK.
Sistema de proyectos
El nuevo sistema de proyectos asocia las plataformas con sus arquitecturas de CPU compatibles. En versiones anteriores de
eMbedded Visual C++, se permitía la selección de arquitecturas de CPU incompatibles con los proyectos activos.
IntelliSense
En Visual Studio 2005, IntelliSense se refleja en los archivos de encabezado del kit de desarrollo de software (SDK) para
proporcionar información precisa sobre cada plataforma de destino.
Soluciones en modo mixto
Visual Studio 2005 permite a los programadores de dispositivos incluir en una misma solución código tanto administrado
(Visual C# o Visual Basic) como no administrado (Visual C++). También permitirá incluir en un mismo proyecto código de
Visual C++ para escritorio y para dispositivos.
Instalación de aplicaciones
Esta función permite a los desarrolladores empaquetar sus aplicaciones de dispositivos y crear instaladores de escritorio para
distribuirlas en los dispositivos.
Asistentes personalizados para clases y aplicaciones
Visual Studio 2005 facilita la escritura de asistentes para clases y aplicaciones en los proyectos de dispositivos.
Editor de recursos
El Editor de recursos incluye recursos específicos para dispositivos, como el Estado del panel de entrada y CAPEdit.
Depuración
El depurador de dispositivos C++ de Visual Studio 2005 presenta las siguientes mejoras y funciones nuevas:
Mejoras en la solidez y el rendimiento con respecto a anteriores depuradores de aplicaciones para dispositivos.
Posibilidad de desasociación y reasociación a procesos.
Posibilidad de asociación a un proceso sin el ejecutable.
Compatibilidad para puntos de interrupción en archivos DLL compartidos.
Depuración de varios procesos.
Mejora en la evaluación de expresiones (incluidas unas ventanas de depurador más expresivas).
Compiladores
Los compiladores de dispositivos C++ de Visual Studio 2005 presentan las siguientes mejoras y funciones nuevas:
Compatibilidad con /LTCG (Generación de código en tiempo de enlace).
Ampliación de los límites de compiladores.
compatibilidad con el modificador /GS para la detección de la saturación del búfer.
Compatibilidad con la palabra clave __restrict.
Actualizaciones para aumentar el porcentaje de conformidad con estándares de C++.
Bibliotecas
Las bibliotecas de Visual C++ para dispositivos ofrecen las siguientes mejoras y funciones nuevas:
Se han actualizado a la base de código 8.0 las bibliotecas MFC (Microsoft Foundation Classes) y ATL (Active Template
Library) de Microsoft para dispositivos.
Mejoras en la seguridad, el rendimiento, la estabilidad y el cumplimiento con estándares en las bibliotecas para
dispositivos MFC, ATL, CRT (en tiempo de ejecución de C) y C++ estándar.
Combinación de la funcionalidad común a las bibliotecas ATL y MFC.
Incorporación de compatibilidad con secuencias a la biblioteca C++ estándar para dispositivos.
ATL
Se han agregado las siguientes funciones a la biblioteca ATL para dispositivos:
Alojamiento de controles ActiveX.
Capacidad para utilizar servicios Web.
Compatibilidad del mapa de bits con la clase CImage.
Clases nuevas para administrar matrices, listas y árboles.
Mejoras en la conversión y manipulación de cadenas.
Compatibilidad ampliada con Socket para IPv6.
MFC
Se han agregado las siguientes funciones a la biblioteca MFC para dispositivos:
Disponibilidad para Smartphone.
Alojamiento y creación de controles ActiveX.

Vea también
Otros recursos
Programar para dispositivos con Visual C++
Desarrollo para Smart Device

Crear y trasladar proyectos de dispositivos de Visual C++


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Visual Studio 2005 proporciona numerosos procedimientos para iniciar un proyecto de dispositivos de C++. En esta sección se
incluyen temas sobre cómo crear nuevos proyectos de dispositivos de Visual C++ y permitir la orientación de proyectos
existentes a dispositivos del entorno de Visual Studio 2005.
La tabla siguiente se ha actualizado para SP1 de Visual Studio 2005.
En esta sección
Cómo: Crear un proyecto de dispositivos de Visual C++
Describe cómo crear nuevos proyectos de aplicaciones para ATL, MFC y Windows CE nativas.
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Describe cómo importar un proyecto escrito en eMbedded Visual C++ 3.0 y 4.0 a Visual Studio 2005 utilizando el asistente
para actualización.
Problemas conocidos con el traslado desde eVC
Describe qué buscar al migrar un proyecto escrito en eMbedded Visual C++ 3.0 y 4.0 a Visual Studio 2005.
Compatibilidad con dispositivos para los proyectos de escritorio
Describe cómo configurar un proyecto de escritorio de C++ para que esté orientado a un dispositivo.
Establecer varias plataformas como destino en proyectos de dispositivos nativos
Describe dos enfoques para hacer que un proyecto único aborde varias plataformas.
Editar recursos en proyectos de dispositivos nativos
Describe el grado en que los editores de recursos para dispositivos se asemejan a sus homólogos de escritorio.
Limitaciones tras crear proyectos de dispositivos nativos
Describe las limitaciones que se presentan si se agrega una plataforma adicional después de la creación del proyecto.
Cómo: Agregar una base de datos a un proyecto de dispositivos nativo
Describe cómo desarrollar una aplicación para dispositivos de SQL Server Mobile o SQL Server Compact Edition utilizando
Visual C++.
Secciones relacionadas
Programar para dispositivos con Visual C++
Cómo: Crear un proyecto de dispositivos de Visual C++
Problemas conocidos con el traslado desde eVC
Desarrollar proyectos de dispositivos de Visual C++
Generar y depurar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Cómo: Crear un proyecto de dispositivos de Visual C++


Hay un par de diferencias significativas entre crear proyectos de dispositivos y crear proyectos de escritorio:
Un subconjunto de las plantillas de proyectos de escritorio se admite para dispositivos. Puede ver estas plantillas cuando
realice el procedimiento siguiente.
En el asistente para aplicaciones del proyecto elija el proceso de crear; necesitará seleccionar una o más plataformas de
destino en la lista proporcionada en la página Plataforma del asistente. Esta lista de plataformas se genera tomando
como base los SDK que ha instalado actualmente.
Nota
Si el compilador emite una advertencia sobre la definición de CE_ALLOW_SINGLE_THREADED_OBJECTS_IN, defina _CE_ALL
OW_SINGLE_THREADED_OBJECTS_IN_MTA y defina el identificador en stdafx.h. Para ello, abra el archivo de encabezado std
afx.h y agregue #define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA al principio del archivo.

Para crear un proyecto de dispositivos de Visual C++


1. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.
2. En el panel Tipos de proyecto, expanda Visual C++ y, a continuación, haga clic en Smart Device. El panel Plantillas
mostrará todas las plantillas de proyecto compatibles con los dispositivos.
3. Haga clic en la plantilla de proyecto que desee utilizar.
4. En el cuadro Nombre, escriba un nombre para el proyecto y haga clic en Aceptar.
5. Utilice el asistente para aplicaciones para terminar de crear el proyecto.
Vea también
Tareas
Crear proyectos con asistentes para aplicaciones
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Asistente para actualización de eMbedded Visual C++ a Visual


Studio 2005
Visual Studio 2005 da forma a un asistente para actualización con el fin de migrar proyectos eMbedded Visual C++ 3.0 y
eMbedded Visual C++ 4.0 a Visual Studio 2005.
El asistente de actualización:
Creará una solución Visual Studio 2005 y un proyecto o proyectos con el correspondiente código fuente,
encabezamientos y recursos migrados desde eMbedded VC++.
Agregará la DLL de MFC a la lista de implementación de proyectos MFC migrados.
Migrará valores de configuración de proyecto, como modificadores del compilador.
Asignará cualquier arquitectura admitida en eVC pero no en Visual Studio 2005 a arquitecturas admitidas en Visual
Studio 2005.
Utilización del Asistente para actualización de eVC a Visual Studio 2005
Cómo utilizar el asistente para actualización con el fin de migrar un proyecto de eVC a Visual Studio
2005
1. En el menú Archivo, elija Abrir y, a continuación, haga clic en Proyecto o solución.
2. Vaya al directorio donde se encuentra el proyecto de eVC. Si el espacio de trabajo de eVC sólo tiene un proyecto, puede
seleccionar bien el archivo .vcw o el archivo .vcp. Si tiene más de un proyecto y desea migrar todos los proyectos,
seleccione el archivo .vcw.
3. Haga clic en Aceptar.
Nota
El asistente de migración lleva a cabo un proceso de migración en contexto; por ejemplo, no se creará ninguna copia del códi
go fuente, sólo del proyecto o los proyectos de Visual Studio 2005. Los proyectos de Visual Studio 2005 creados como result
ado de la migración incluirán los mismos archivos de recursos que el proyecto de eVC original incluido.

Asignar arquitecturas
eMbedded Visual C++ admitía algunas arquitecturas de dispositivos que Visual Studio 2005 ya no admite. Esto se debe a que
las nuevas plataformas de hardware para las que es posible desarrollar aplicaciones en Visual Studio 2005 exigen el uso de
arquitecturas más recientes. Afortunadamente, se puede establecer una correspondencia (asignación) entre todas las
arquitecturas anteriores y las arquitecturas de dispositivo más modernas. El asistente para actualizaciones lleva a cabo esta
asignación automática. La tabla muestra las arquitecturas de dispositivo admitidas por eMbedded Visual C++ frente a las
arquitecturas de dispositivo admitidas por Visual Studio 2005.
Arquitectura de eVC Arquitectura compatible de Visual Studio 2005
ARM ARMv4

ARMv4 ARMv4

ARMv4i ARMv4i

ARMv4T ARMv4i

MIPS MIPSII

Mips16 MIPSII
MipsII MipsII

MipsII_fp MipsII_fp

MipsIV MipsIV

MipsIV_fp MipsIV_fp

SH3 SH4

SH4 SH4

Emulador X86

X86 X86

Cuando se actualiza el proyecto de eVC utilizando el asistente, el nuevo proyecto creado en Visual Studio 2005 tiene como
destino cualquiera de los SDK instalados que admiten la arquitectura en el nuevo proyecto. Las arquitecturas migradas
heredan sus valores de configuración de una de las arquitecturas de eVC. La siguiente tabla ilustra la asignación de
arquitecturas de dispositivos admitidas de eMbedded Visual C++ frente a arquitecturas de dispositivos admitidas de Visual
Studio 2005.
Arquitectura original Se corresponde con Notas
Distinta de ARM/ARMV Vea la tabla de la sección "Asignar
4/ARMV4I arquitecturas"

ARM, pero no ARMV4i ARMV4 y ARMV4i Los valores de configuración de ARMV4i se heredan de la configu
ración de ARM en eVC.

ARMV4, pero no ARMV ARMV4 y ARMV4i Los valores de configuración de ARMV4i se heredan de la configu
4i ración de ARMV4 en eVC.

ARM/ARMV4 y ARMV4i ARMV4 y ARMV4i Los valores de configuración de ARMV4i se heredan de la configu
ración de ARMV4i en eVC.

eMbedded Visual C++ versión 4.0 establece, de forma predeterminada, el estilo de cuadro de diálogo en DS_MODALFRAME para
aplicaciones de Pocket PC MFC. En MFC 8.0 no se admite este estilo.
Nota
Si aparece el mensaje de error "No hay plataformas que coincidan con las plataformas originales de este archivo de proyecto
", quizás sea necesario instalar una versión compatible del SDK con el que se configuró el proyecto original.

Vea también
Referencia
Windows Mobile Platform Migration FAQ for Developers
Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005
Step by Step: Migrating an eMbedded Visual C++ Application to Visual Studio 2005
Conceptos
Problemas conocidos con el traslado desde eVC
Desarrollo para Smart Device

Problemas conocidos con el traslado desde eVC


Hay una serie de recursos y herramientas de C++ que proporcionan ayuda para convertir los proyectos de eMbedded Visual
C++ existentes a Visual Studio 2005. Para obtener más información, consulte Asistente para actualización de eMbedded Visual
C++ a Visual Studio 2005.
A partir de eVC se han actualizado las bibliotecas Active Template Library (ATL) y Microsoft Foundation Classes (MFC), y la
biblioteca estándar de C++. Se han dejado de admitir algunas clases. Consulte Lista de clases de eVC no admitidas de MFC 3.0
a 8.0. El código que llama a estas clases tiene que modificarse para poder compilar en Visual Studio 2005. En el traslado desde
eVC suelen surgir los problemas siguientes.
Problema Descripción/Solución
No se llama al método CCeSocket::OnReceive() en MFC para los dispositivos más mode La resolución se detalla en: http://s
rnos que CE 3.0. upport.microsoft.com/default.aspx?
scid=kb;en-us;253945.

No se admite la clase CArchive Class. Muchos proyectos de eVC contiene


n referencias a la clase CArchive C
lass. Para solucionar este problema
es necesario quitar las referencias a
CArchive.

Algunas clases de colección, como CObArray, CMapPtrToPtr, etc., se implementan en CE 5. Para evitar esta diferencia en la im
0 mediante versiones con plantilla de CArray<>, CMap<>, etc. En las bibliotecas de eMbe plementación, cambie la macro IM
dded Visual C++ y C++ para escritorio, estos tipos se implementan como clases normales PLEMENT_SERIAL para que utilice
sin plantilla. Por tanto, al llamar a IMPLEMENT_SERIAL en estas clases con plantilla se prod CObject en lugar de CObArray, CM
uce un error de compilación: apPtrToPtr, etc.
error C2039: 'classCObArray': no es un miembro de 'CArray <TYPE, ARG_TYPE>' Es decir, no escriba esto:
error C2065: 'classCObArray': identificador no declarado IMPLEMENT_SERIAL(CYourClass, C
ObArray, 0)

Utilice en su lugar:
IMPLEMENT_SERIAL(CYourClass, C
Object, 0)

De forma predeterminada, eMbedded Visual C++ versión 4.0 establece el estilo de los cuadros de diálogo en
DS_MODALFRAME para las aplicaciones de Pocket PC MFC. En MFC 8.0, este estilo no se admite.
Ejemplos
En esta sección se describen algunos de los errores más comunes que puede encontrar el usuario al migrar un proyecto de
eMbedded Visual C++ a Visual Studio 2005. Para obtener más información, consulte Migrating Microsoft eMbedded Visual
C++ Projects to Visual Studio 2005.
Error de compilación: No se puede abrir el archivo de inclusión 'wceres.rc'
Haga clic con el botón secundario del mouse en el archivo de recursos del proyecto (RC), seleccione Ver código y, a
continuación, marque como comentario la línea siguiente:

//#include "wceres.rc"

NUM_TOOL_TIP no está definido


En el archivo de encabezado, defina #define _WIN32_WCE_PSPC para las configuraciones de Pocket PC y _WIN32_WCE_WFSP
para las configuraciones de Smartphone.
No se puede abrir el archivo OLDNAMES.lib
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo del proyecto y, a
continuación, seleccione Propiedades.
Haga clic en Vinculador. Edite la propiedad Omitir biblioteca específica agregando OLDNAMES.LIB.
Sobrecarga ambigua
Biblioteca estándar de C++ (SCL) y ATL tienen API que también existen en el SDK del dispositivo. Elimine la ambigüedad
con un espacio de nombres, como ::.
Tipo de equipo de módulo 'THUMB' en conflicto con tipo de equipo de destino 'ARM'
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo del proyecto y, a
continuación, seleccione Propiedades.
En Propiedades de configuración, expanda Vinculador y, a continuación, haga clic en la propiedad Línea de
comandos. Quite el modificador /MACHINE:THUMB de la línea de comandos para cada configuración de Windows
Mobile 5.0 en las páginas Propiedad.
Cadena de recurso no separada correctamente
Puede producirse un problema si las cadenas de recurso de las aplicaciones trasladadas no están separadas
correctamente. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo del proyecto
y, a continuación, seleccione Propiedades. En Propiedades de configuración, expanda Recursos y, a continuación,
seleccione la propiedad Línea de comandos. Agregue un modificador -n a la línea de comandos del compilador de
recursos.
Se esperaba BEGIN en el error de cuadro de diálogo
Este error suele ir seguido de errores relacionados con archivos no encontrados, como "archivo no encontrado: 0x1."
Vaya al archivo RC indicado por el error y edite el código para utilizar una instrucción #ifdef alrededor de la declaración
FONT como se muestra en el ejemplo de código siguiente.
Código original:

IDD_COMPTEST DIALOGEX 0, 0, 186, 95


STYLE DS_SETFONT | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
END

Código modificado:

IDD_COMPTEST DIALOGEX 0, 0, 186, 95


STYLE DS_SETFONT | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
#ifdef _WIN32_WCE
FONT 8, "MS Sans Serif"
#else
FONT 8, "MS Sans Serif", 0, 0, 0x1
#endif
BEGIN
END

Vea también
Conceptos
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Otros recursos
Windows Mobile Platform Migration FAQ for Developers
Desarrollo para Smart Device

Compatibilidad con dispositivos para los proyectos de


escritorio
Visual Studio 2005 admite la existencia de un proyecto que aborde varias plataformas, incluyendo plataformas de escritorio y
plataformas de dispositivos inteligentes, como dispositivos de Pocket PC y Smartphone. Puede utilizar los Asistentes de
clases de C++ para proyectos de dispositivo si desea crear un proyecto de dispositivos en la misma solución que el
proyecto de escritorio. Para obtener más información, vea Asistentes para clases en proyectos de dispositivos de C++.
Posteriormente, puede trasladar la aplicación de escritorio al proyecto de dispositivo creado utilizando los recursos siguientes:
Utilizar Asistentes para código con proyectos de dispositivos
Cómo: Crear un proyecto de dispositivos de Visual C++
Establecer varias plataformas como destino en proyectos de dispositivos nativos
Editar recursos en proyectos de dispositivos nativos
Generar y depurar proyectos de dispositivos de Visual C++
Editores de recursos para proyectos de dispositivos
Depurar proyectos de dispositivos
Empaquetar soluciones de dispositivos para su implementación
Utilizar recursos en varias plataformas.
Vea también
Referencia
Referencia del lenguaje Visual Basic para dispositivos
Conceptos
Referencia de .NET Compact Framework para proyectos de dispositivos
Referencia de la Biblioteca estándar de C++ para dispositivos
Referencia de la biblioteca en tiempo de ejecución de C para dispositivos
Otros recursos
Referencia a ATL para dispositivos
Referencia a MFC para dispositivos
Desarrollo para Smart Device

Establecer varias plataformas como destino en proyectos de


dispositivos nativos
Con Visual Studio 2005 puede crear un proyecto de dispositivo único destinado a plataformas de varios dispositivos, como
Pocket PC 2003 y Smartphone 2003.
Existen dos medios para poder establecer un proyecto de dispositivos destinado a varias plataformas:
Con los asistentes para aplicaciones en el momento de la creación del proyecto. Este es el método más sencillo. Para
obtener más información, vea Cómo: Crear un proyecto de dispositivos para múltiples plataformas.
Después de crear su proyecto. Para obtener más información, vea Cómo: Agregar una nueva plataforma a un proyecto
de dispositivos.
Si selecciona varias plataformas de la página Plataformas en el asistente para aplicaciones del proyecto, se generará y se
configurará un archivo de recursos para cada una de ellas. Sin embargo, si agrega una plataforma después de crear el
proyecto, necesitará agregar manualmente una plataforma y un archivo de recursos. Para obtener más información, vea
Utilizar recursos en varias plataformas.
Vea también
Tareas
Crear proyectos con asistentes para aplicaciones
Conceptos
Asistentes de C++ para aplicaciones MFC en Windows CE
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Editar recursos en proyectos de dispositivos nativos


Dada la naturaleza multiplataforma de Visual Studio 2005, se genera un archivo de recursos independiente para cada una de
las plataformas que se decida incluir, como Pocket PC y Smartphone. Los editores de recursos de los proyectos de dispositivos
son prácticamente idénticos a los editores de recursos de los proyectos de escritorio. Salvo el Editor de cuadros de diálogo, que
tiene cambios significativos, todos los demás editores son compatibles. Para obtener más información, vea Utilizar los editores
de recursos para proyectos de dispositivos y Editores de recursos.
Se pueden abordar todas las plataformas en el momento de la creación del proyecto; esto facilita la personalización de la
interfaz de usuario (IU) de la aplicación para ajustarse a los factores de forma de los dispositivos y permite mantener un
proyecto para la aplicación multiplataforma propia. El proyecto de ejemplo creado en Tutorial: Crear una aplicación MFC
multiplataforma para Smart Devices tiene un archivo de recursos para Pocket PC y un archivo de recursos para Smartphone.
Observe que el archivo de recursos para Smartphone tiene un icono Sin generar porque la configuración activa actual del
proyecto es Pocket PC 2003 (Armv4). Es posible cambiar la configuración activa a Smartphone 2003 (ArmV4) utilizando el
Valores del Administrador de configuración, Asistente para proyectos para Smart Device. De este modo se eliminará el icono
Sin generar del archivo de recursos de Smartphone 2003 que se mostrará en el archivo de recursos de Pocket PC 2003
(Armv4).
Vea también
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Limitaciones tras crear proyectos de dispositivos nativos


En esta sección, se enumeran las limitaciones de las aplicaciones de C++ nativas para dispositivos inteligentes en comparación
con las aplicaciones nativas para el escritorio.
Diferencias entre proyectos nativos de escritorio y de dispositivos
Para obtener más información sobre cómo crear proyectos de dispositivos de C++, vea Asistentes para clases en proyectos de
dispositivos de C++.
Para filtrar referencias y temas de Ayuda, vea Cómo: Optimizar la Ayuda para el desarrollo de Smart Device.
Para conocer las diferencias de la interfaz de usuario entre proyectos, vea Referencia de la interfaz de usuario para
dispositivos
Para desarrollar proyectos de dispositivos ATL, vea Diferencias entre ATL para dispositivos y ATL estándar.
Para desarrollar los proyectos de dispositivos MFC, vea Diferencias entre MFC C++ para dispositivos y MFC estándar y
MFC única para clases de dispositivos.
Para el desarrollo de dispositivos de C++, vea Referencia de la Biblioteca estándar de C++ para dispositivos.
Para utilizar los recursos con proyectos de dispositivos, vea Utilizar recursos en varias plataformas.
Para obtener información sobre los modificadores de los compiladores, vea Compiladores para Smart Devices.
Para depurar proyectos de dispositivo, vea Depurar proyectos de dispositivos
Para empaquetar proyectos de dispositivo, vea Empaquetar soluciones de dispositivos para su implementación
Vea también
Tareas
Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles con dispositivos
Cómo: Encontrar la Ayuda para los métodos y clases MFC compatibles con dispositivos
Conceptos
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Cómo: Agregar una base de datos a un proyecto de dispositivos


nativo
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Puede desarrollar aplicaciones para dispositivos inteligentes que utilicen SQL Server Mobile Edition o SQL Server Compact
Edition con el entorno de desarrollo Visual Studio.
Para obtener instrucciones sobre cómo desarrollar una aplicación de SQL Mobile Edition o SQL Server Compact Edition con
Visual C++ para dispositivos, consulte Installing a Development Environment.
Cuando se utiliza SQL Server Mobile Edition o SQL Server Compact Edition en el proyecto nativo, el archivo CAB de instalación
no se descarga automáticamente en el dispositivo al distribuir el proyecto. Puede agregar el archivo CAB a su proyecto.
El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Para agregar el archivo CAB de SQL Server Mobile Edition o SQL Server Compact Edition al proyecto
1. Haga clic en el proyecto con el botón secundario y en el menú contextual Proyecto, haga clic en Agregar elemento
existente.
2. Desplácese hasta el archivo CAB.
De forma predeterminada, los archivos cab se encuentran en %Archivos de programa%\Microsoft Visual Studio
8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce500\<procesador de dispositivo>\.
O bien,
3. Copie el archivo CAB al dispositivo inteligente.
De forma predeterminada, los archivos cab se encuentran en %Archivos de programa%\Microsoft Visual Studio
8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce500\<procesador de dispositivo>\.
4. Instale SQL Server Mobile Edition o SQL Server Compact Edition ejecutando el archivo CAB en el dispositivo.
Vea también
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Desarrollar proyectos de dispositivos de Visual C++


Esta sección contiene temas que describen aquellos aspectos únicos sobre el desarrollo de aplicaciones de dispositivos.
En esta sección
Cambiar de plataforma en proyectos de dispositivo
Describe cómo cambiar destinos utilizando el mismo proyecto.
Asistentes para clases en proyectos de dispositivos de C++
Proporciona información sobre cómo utilizar asistentes de C++ para proyectos de dispositivos.
Editores de recursos para proyectos de dispositivos
Proporciona información sobre editores de recursos para proyectos de dispositivos.
Compiladores para Smart Devices
Describe los compiladores que tienen como destino microprocesadores utilizados en dispositivos inteligentes.
Explicación de código: Código generado por el asistente en proyectos de dispositivos de Visual C++
Describe el código generado por los asistentes de Visual C++ en proyectos de dispositivos.
Cómo: Especificar la ruta de acceso remota del resultado principal del proyecto
Describe cómo especificar el lugar del dispositivo de destino donde se implementará el proyecto en cuestión.
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Describe cómo cambiar el destino predeterminado de proyectos nativos.
Vea también
Referencia
Windows Mobile
Otros recursos
Programar para dispositivos con Visual C++
Desarrollo para Smart Device

Cambiar de plataforma en proyectos de dispositivo


Resulta muy sencillo modificar la plataforma de destino. Por ejemplo, establezca como destino una plataforma de Pocket PC
2003 o una plataforma de Smartphone utilizando el mismo proyecto.
Para crear un proyecto cuyo destino puedan ser varias plataformas en Visual C++, vea:
Establecer varias plataformas como destino en proyectos de dispositivos nativos
Valores del Administrador de configuración, Asistente para proyectos para Smart Device.
Para obtener información sobre cómo establecer la plataforma de destino en el Administrador de configuración, vea:
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Valores del Administrador de configuración, Asistente para proyectos para Smart Device.
Para obtener información adicional sobre cómo trabajar con recursos de varias plataformas en un proyecto de Visual C++, vea
Utilizar recursos en varias plataformas.
Vea también
Conceptos
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Problemas conocidos con el traslado desde eVC
Otros recursos
Desarrollo de dispositivos inteligentes
Desarrollo para Smart Device

Asistentes para clases en proyectos de dispositivos de C++


Los proyectos de dispositivos de Visual C++ admiten un subconjunto de los asistentes para clases que se admiten en los
proyectos de escritorio de Visual C++. Algunos asistentes no se admiten en los proyectos de dispositivos debido a las
diferencias entre las plataformas Windows y Windows CE. Para obtener más información, vea Agregar funcionalidad con los
Asistentes para código.
En esta sección
Utilizar Asistentes para código con proyectos de dispositivos
Describe qué asistentes para clases de C++ se admiten, y cómo se obtiene acceso a ellos.
Opciones del asistente en los proyectos de dispositivos nativos
Proporciona vínculos a temas que describen las opciones de asistente que no se admiten en asistentes para clases de C++
concretos.
Opciones no admitidas en el cuadro de diálogo Propiedades del proyecto
Describe el comportamiento que difiere entre los proyectos de escritorio en el cuadro de diálogo Propiedades del proyecto.
No todos los asistentes para aplicaciones nativas de Smart Device proporcionan la opción de vinculación estática y vinculación
dinámica. En la tabla siguiente se esquematiza el comportamiento de los Asistentes para aplicaciones de Smart Device respecto
a la vinculación en tiempo de ejecución:
Wizard Notas
Proyecto Win32 de Smart Device – Aplica Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
ción para Windows o en el momento de la creación del proyecto.

Proyecto Win32 de Smart Device – Aplica Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
ción de consola o en el momento de la creación del proyecto.

Proyecto Win32 de Smart Device – Archi Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
vo DLL o en el momento de la creación del proyecto.

Proyecto Win32 de Smart Device – Biblio Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
teca estática o en el momento de la creación del proyecto.

Proyecto ATL de Smart Device – Archivo Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
DLL o en el momento de la creación del proyecto.

Proyecto ATL de Smart Device – Archivo Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
EXE o en el momento de la creación del proyecto.

Aplicación de Smart Device MFC – SDI Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
o en el momento de la creación del proyecto.

Aplicación de Smart Device MFC – SDI co Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
n DocList o en el momento de la creación del proyecto.

Aplicación de Smart Device MFC – Basad Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
a en cuadros de diálogo o en el momento de la creación del proyecto.

DLL para Smart Device MFC – Archivo DL Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
L estándar o en el momento de la creación del proyecto.

Control ActiveX para Smart Device MFC Vínculo estático. No se proporciona ninguna opción para vínculo dinámico o estátic
o en el momento de la creación del proyecto.
DLL para Smart Device MFC – Archivo DL Vínculo dinámico. No se proporciona ninguna opción para vínculo dinámico o estát
L de extensión ico en el momento de la creación del proyecto.

La tabla anterior hace referencia a la implementación utilizando la tecla de método abreviado F5. La instalación de la aplicación
tiene lugar como se describe en esta sección:
A la hora de crear un proyecto CAB de Smart Device para una aplicación diseñada en C++, es necesario agregar de
forma manual cualquier dependencia, como atl80.dll, mfc80U.dll y/o msvcrt.dll, al proyecto CAB en cuestión si se
están estableciendo vínculos de forma dinámica a los archivos DLL especificados. Si se están estableciendo vínculos de
forma dinámica y resulta necesario redistribuir los archivos DLL del proyecto CAB, no instale los archivos DLL en el
directorio del sistema (como \windows) en el dispositivo. En su lugar, instale los archivos DLL en el directorio local de la
aplicación. Si se está redistribuyendo un conjunto de aplicaciones y todas están vinculadas de forma dinámica a los
tiempos de ejecución de ATL/MFC, se recomienda instalar todas las aplicaciones, junto con los archivos DLL en tiempo de
ejecución, en un solo directorio de aplicaciones y proporcionar accesos directos a las aplicaciones en cuestión que se
pueden colocar en sus propias carpetas. De este modo se ahorrará espacio y se evitará el riesgo de que los archivos DLL
del directorio del sistema se reemplacen posteriormente al realizar otra instalación de una aplicación y se interrumpan
las aplicaciones que estén vinculadas de forma dinámica a los archivos DLL.
Se recomienda el establecimiento de vínculos estáticos para reducir las dependencias en los archivos DLL de MFC/ATL. Si
se están estableciendo vínculos de forma estática, los archivos DLL no se deberían redistribuir con la aplicación en
cuestión.
Vea también
Otros recursos
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Utilizar Asistentes para código con proyectos de dispositivos


Los proyectos de dispositivos pueden utilizar muchos (iguales) de los asistentes de código que utilizan los proyectos de
escritorio de C++. Algunos están admitidos y otros no, pero cuentan con opciones para los no admitidos. Para obtener más
información sobre opciones no admitidas correspondientes a determinados asistentes de código, vea Opciones del asistente
en los proyectos de dispositivos nativos.
Asistentes de código no admitidos
Los proyectos de dispositivos de Visual C++ admiten los siguientes asistentes:
Asistente para objetos simples ATL. Para obtener más información sobre opciones no admitidas en este asistente, vea
Opciones del asistente en Opciones, Asistente para objetos simples ATL.
Asistente para controles ATL. Para obtener más información sobre opciones no admitidas en este asistente, vea Opciones
del asistente en Opciones, Asistente para controles ATL, Opciones para interfaces en el Asistente para controles ATL y
Opciones no compatibles en Propiedades estándar del Asistente para controles ATL.
Asistente para cuadros de diálogo ATL.
Agregar compatibilidad con ATL a un proyecto MFC
Asistente para páginas de propiedades ATL. Para obtener más información sobre opciones no admitidas en este
asistente, vea Valores no compatibles en Opciones del Asistente para páginas de propiedades ATL.
Asistente de clases genéricas de C++
Asistente para clases MFC. Para obtener más información sobre opciones no admitidas en este asistente, vea Opciones
no compatibles del Asistente para clases MFC.
Obtener acceso a asistentes de código Smart Device de Visual C++
Los asistentes de código Smart Device Visual C++ se encuentran disponibles en el cuadro de diálogo Agregar clase (Cuadro de
diálogo). Es posible obtener acceso al cuadro de diálogo Agregar clase según se describe a continuación:
En el menú Proyecto, haga clic en Agregar clase.
En Explorador de soluciones, haga clic con el botón secundario del mouse en cualquier carpeta, haga clic en Agregar y, a
continuación, haga clic en Clase.
En la ventana Vista de clases, haga clic con el botón secundario del mouse en el nodo adecuado, haga clic en Agregar y,
a continuación, haga clic en Clase.
Para ver los asistentes que se encuentran disponibles para proyectos Smart Device, expanda la estructura del directorio en el
panel Categorías del cuadro de diálogo Agregar clase y haga clic en Smart Device. Las plantillas que se encuentran
disponibles aparecen en el panel Plantillas.
Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones del asistente en los proyectos de dispositivos nativos


Debido a las diferencias existentes entre proyectos de dispositivos y de escritorio, algunos de los asistentes de clases de C++
contienen opciones que no admiten los dispositivos o que se comportan de una forma diferente en proyectos de dispositivos.
En los siguientes temas se describen las opciones de asistente no compatibles cuando el proyecto actual tiene como destino un
dispositivo.
En esta sección
Opciones del asistente en Opciones, Asistente para objetos simples ATL
Describe opciones no admitidas del asistente para la página Opciones del Asistente para objetos simples ATL.
Opciones del asistente en Opciones, Asistente para controles ATL
Describe opciones no admitidas del asistente para la página Opciones del Asistente para controles ATL.
Opciones para interfaces en el Asistente para controles ATL
Describe opciones no admitidas del asistente para la página Interfaces del Asistente para controles ATL.
Opciones de asistente no compatibles para Apariencia, Asistente para controles ATL (dispositivos)
Describe las opciones no admitidas del asistente para la página Apariencia del Asistente para controles ATL.
Opciones no compatibles en Propiedades estándar del Asistente para controles ATL
Describe opciones no admitidas del asistente para la página Propiedades estándar del Asistente para controles ATL.
Valores no compatibles en Opciones del Asistente para páginas de propiedades ATL
Describe opciones no admitidas del asistente para la página Opciones del Asistente para páginas de propiedades ATL.
Opciones no compatibles del Asistente para clases MFC
Describe las opciones de asistente no compatibles para el Asistente para clases MFC.
Opciones no admitidas para la configuración de la aplicación en el Asistente para proyectos ATL de Smart Device
Describe opciones no admitidas del asistente para la página Configuración de la aplicación del Asistente para Smart
Device ATL.
Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones del asistente en Opciones, Asistente para objetos


simples ATL
Describe opciones no admitidas del asistente para dispositivos inteligentes en la página Opciones del Asistente para objetos
simples ATL. Algunos de los elementos de esta página del asistente o bien no son compatibles con los dispositivos, o bien se
comportan de forma diferente en un proyecto de dispositivos.
Opciones no compatibles y compatibles pero de distinta forma
La siguiente tabla describe los elementos que se comportan de forma diferente en proyectos de dispositivos.
Sección Comportamiento
Modelo d La configuración del modelo de subprocesos dependerá de si la plataforma de destino admite o no DCOM. Si la pl
e subproc ataforma de destino no admite DCOM, el modelo de subprocesos utilizado en el código generado siempre será "D
esamiento isponible", con independencia del modelo de subprocesos que seleccione el usuario.
El software de Windows Mobile 2003 no admite DCOM.
Para obtener más información sobre COM, DCOM y modelos de subprocesos para Windows CE, vea Component
Services (COM and DCOM) y COM Threads and Processes en la documentación de Windows CE 5.0.

Interfaz Los proyectos de dispositivos no admiten la casilla de verificación Compatible con automatización.

Compatibi Los proyectos de dispositivos no admiten la casilla de verificación IObjectWithSite (compatibilidad con objet
lidad os de IE).

Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones del asistente en Opciones, Asistente para controles


ATL
Algunos de los elementos de esta página del asistente o bien no son compatibles con los dispositivos, o bien se comportan de
forma diferente en un proyecto de dispositivos.
Opciones no admitidas o admitidas de forma diferente
La siguiente tabla describe los elementos que se comportan de forma diferente en proyectos de dispositivos.
Sección Comportamiento
Modelo d La configuración del modelo de subprocesos dependerá de si la plataforma de destino admite o no DCOM. Si la pl
e subproc ataforma de destino no admite DCOM, el modelo de subprocesos utilizado en el código generado siempre será "D
esamiento isponible", con independencia del modelo de subprocesos que seleccione el usuario.
El software de Windows Mobile 2003 no admite DCOM.
Para obtener más información sobre COM, DCOM y modelos de subprocesos para Windows CE, vea Component
Services (COM and DCOM) y COM Threads and Processes en la documentación de Windows CE 5.0.

Tipo de co La opción Control DHTML no se admite en proyectos de dispositivos.


ntrol

Compatibi La casilla de verificación Con licencia no se admite en proyectos de dispositivos.


lidad

Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones para interfaces en el Asistente para controles ATL


Describe las interfaces no compatibles para Smart Devices en la página Interfaces del Asistente para controles ATL.
Algunas de las interfaces que aparecen en esta página del asistente o bien no son compatibles con los dispositivos, o bien se
comportan de forma diferente en un proyecto de dispositivos.
Opciones no admitidas o admitidas de forma diferente
La siguiente tabla describe las interfaces que se comportan de forma diferente en proyectos de dispositivos.
Interfaz Comportamiento
IDataObje Esta interfaz no se admite en Windows CE.
ct

IPersistSt Esta interfaz sólo se admite en plataformas que admiten DCOM.


orage
El software Windows Mobile™ 2003 no admite DCOM.
Para obtener más información sobre COM y DCOM en Windows CE, consulte Servicios de componentes (COM y D
COM) en la documentación de Windows CE 5.0.

Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones de asistente no compatibles para Apariencia,


Asistente para controles ATL (dispositivos)
Algunos elementos en esta página del asistente no son totalmente compatibles con los proyectos de dispositivos.
Opciones admitidas de forma diferente
En la siguiente tabla se describen los elementos que difieren en los proyectos de dispositivos.
Sección Diferencia
Agregar control basado en Sólo se admiten los siguientes elementos para las plataformas de dispositivos:
Button
ComboBox
De edición
ListBox
Scrollbar
Estático
RichEdit (se admite en algunas plataformas Windows CE)

Vea también
Otros recursos
Opciones del asistente en los proyectos de dispositivos nativos
Desarrollo para Smart Device

Opciones no compatibles en Propiedades estándar del


Asistente para controles ATL
Debido a la ausencia de GUID CLSID_StockPicturePage, CLSID_StockColorPage y CLSID_StockFontPage, algunas de las
propiedades estándar en esta página de asistente no se admiten en dispositivos.
Propiedades no compatibles
Las siguientes propiedades estándar no se admiten en dispositivos:
BackColor
BorderColor
FillColor
Font
ForeColor
MouseIcon
Picture
Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Valores no compatibles en Opciones del Asistente para páginas


de propiedades ATL
Algunos de los elementos de esta página del asistente o bien no son compatibles con los dispositivos, o bien se comportan de
forma diferente en un proyecto de dispositivos.
La siguiente tabla describe los elementos que se comportan de forma diferente en proyectos de dispositivos.
Sección Comportamiento
Modelo d La configuración del modelo de subprocesos dependerá de si la plataforma de destino admite o no DCOM. Si la pl
e subproc ataforma de destino no admite DCOM, el modelo de subprocesos utilizado en el código generado siempre será "D
esamiento isponible", con independencia del modelo de subprocesos que seleccione el usuario.
El software de Windows Mobile 2003 no admite DCOM.
Para obtener más información sobre COM, DCOM y modelos de subprocesos para Windows CE, vea Component
Services (COM and DCOM) y COM Threads and Processes en la documentación de Windows CE 5.0.

Interfaz Los proyectos de dispositivos no admiten la casilla de verificación Compatible con automatización.

Compatibi Los proyectos de dispositivos no admiten la casilla de verificación IObjectWithSite (compatibilidad con objetos d
lidad e IE).

Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones no compatibles del Asistente para clases MFC


Algunos de los elementos de esta página del asistente o bien no son compatibles con los dispositivos, o bien se comportan de
forma diferente en un proyecto de dispositivos.
Opciones no admitidas
No se admiten los siguientes elementos en proyectos de dispositivos:
Active accessibility
Id. del recurso DHTML
Archivos .HTM
Automatización
Generar recursos DocTemplate
Cadenas de plantillas de documentos

Vea también
Otros recursos
Asistentes para clases en proyectos de dispositivos de C++
Desarrollo para Smart Device

Opciones no admitidas para la configuración de la aplicación


en el Asistente para proyectos ATL de Smart Device
Describe las opciones de asistente no compatibles para los dispositivos inteligentes en la página Configuración de la aplicación
del Asistente para proyectos ATL de Smart Device.
Algunos de los elementos de esta página del asistente o bien no son compatibles con los dispositivos, o bien se comportan de
forma diferente en un proyecto de dispositivos.
Opciones no admitidas
La siguiente tabla describe los elementos que se comportan de forma diferente en proyectos de dispositivos.
Sección Comportamiento
(Ninguno) La casilla de verificación Con atributos no se admite en proyectos de dispositivos.

El Asistente para proyectos ATL de Smart Device no implementa la eliminación del Registro de la
biblioteca de tipos
Dado que Windows Mobile no implementa la funcionalidad de COM para quitar bibliotecas de tipos del Registro, el Asistente
para proyectos ATL de Smart Device genera código que implementa la función DllUnregisterServer de forma diferente:

// DllUnregisterServer - Removes entries from the system registry


STDAPI DllUnregisterServer(void)
{
HRESULT hr = _AtlModule.DllUnregisterServer(false);
return hr;
}

La acción de pasar false a la función DllUnregisterServer indica a COM que no debe eliminar del Registro la biblioteca de
tipos. Si se cambia el parámetro a true, se producirá un error en todas las llamadas a DllUnregisterServer con E_NOTIMPL.
Vea también
Otros recursos
Opciones del asistente en los proyectos de dispositivos nativos
Desarrollo para Smart Device

Opciones no admitidas en el cuadro de diálogo Propiedades del


proyecto
Algunos de los elementos del cuadro de diálogo Propiedades del proyecto o bien no son compatibles con los dispositivos, o
bien se comportan de forma diferente en un proyecto de dispositivos.
Opciones no admitidas o admitidas de forma diferente
En la tabla siguiente se describen los elementos que se comportan de forma diferente en proyectos de dispositivos con
respecto a un equipo de escritorio.
Sección Comportamiento
Valores pred Aunque es posible establecer Uso de MFC en Utilizar MFC en una biblioteca estática así como Uso de ATL
eterminados en Vínculo dinámico a ATL, este escenario no se admite en un proyecto de dispositivos.
del proyecto

Valores pred Nota


eterminados Este elemento sólo se aplica a proyectos de aplicaciones de Smart Device MFC y proyectos de DLL de Smart
del proyecto Device MFC.

Si se cambia Uso de MFC de Utilizar MFC en un archivo DLL compartido (predeterminado) a Utilizar MFC
en una biblioteca estática, también debería quitarse mfc80ud.dll (Depurar) y/o mfc80u.dll (Publicar) de Ar
chivos adicionales en la sección General de la página de propiedades de implementación.
Del mismo modo, si se cambia Uso de MFC de Utilizar MFC en una biblioteca estática a Utilizar MFC en u
n archivo DLL compartido, también se debería agregar mfc80ud.dll (Depurar) y mfc80u.dll (Publicar) a Arc
hivos adicionales en la sección General de la página de propiedades Implementación.
Cuando agregue mfc80u.dll o mfc80ud.dll, también debe agregar atl80.dll y msvcr80.dll o msvcr80d.dll.

Vea también
Referencia
Páginas de propiedades (C++)
Otros recursos
Opciones del asistente en los proyectos de dispositivos nativos
Desarrollo para Smart Device

Editores de recursos para proyectos de dispositivos


El uso de un editor de recursos con un proyecto de dispositivos es similar al de un editor de recursos con un proyecto de
escritorio en Visual C++. En esta sección se detallan algunas diferencias entre los editores de recursos para dispositivos y el
escritorio. Para obtener más información, vea Editores de recursos.
Los SDK de dispositivos pueden definir su propio modelo de interfaz de usuario (IU), que se puede utilizar para filtrar la lista de
los controles que aparecen en el Editor de cuadros de diálogo con el fin de que se muestren únicamente los compatibles con la
plataforma en cuestión. Visual Studio 2005 contiene un modelo de de interfaz de usuario para Windows CE incluidos los SDK
de Windows Mobile 2003.
En esta sección
Utilizar los editores de recursos para proyectos de dispositivos
Proporciona información general sobre el uso de los editores de recursos con proyectos de dispositivos.
Utilizar recursos en varias plataformas
Explica cómo utilizar los recursos en proyectos que abordan varias plataformas.
Controles del cuadro de diálogo Dispositivo
Describe los controles de cuadro de diálogo que se admiten para los proyectos de dispositivos.
Vea también
Otros recursos
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Utilizar los editores de recursos para proyectos de dispositivos


Los editores de recursos de los proyectos de dispositivos son prácticamente idénticos a los editores de recursos de los
proyectos de escritorio. Salvo el Editor de cuadros de diálogo, que tiene cambios significativos, todos los demás editores son
compatibles. Para obtener más información, vea Editores de recursos.
Los proyectos nativos para dispositivos inteligentes de Visual Studio 2005 admiten los tipos de recursos siguientes:
Acelerador
Mapa de bits
Cursor
Cuadro de diálogo
Icono
Menú
Registro
Tabla de cadenas
Barra de herramientas
Versión
Editor de cuadros de diálogo
El editor de cuadros de diálogo de dispositivos difiere del editor de cuadros de diálogo de escritorio en los siguientes puntos:
Hay algunos controles que no existen en los controles de escritorio y los controles admitidos en dispositivos tienen
propiedades ligeramente diferentes a las de los controles de escritorio correspondientes. Para obtener más información,
vea Controles del cuadro de diálogo Dispositivo.
Hay nuevas plantillas de cuadro de diálogo para factores de forma de dispositivos conocidos.
El comportamiento y las propiedades de los controles de cuadro de diálogo se derivan de un modelo de interfaz de
usuario (IU) que acompaña a cada kit de desarrollo de software (SDK) instalado. Este modelo de interfaz de usuario
proporciona el conjunto correcto de controles para la plataforma de destino actual. Si el SDK no define un modelo de
interfaz de usuario, el editor de cuadros de diálogo toma como valor predeterminado el modelo de interfaz de usuario de
Windows CE.
Hay dos controles únicos para proyectos de dispositivos: Estado del panel de entrada (Control) y Control CAPEdit.
Archivos RC2
Algunos de los asistentes para aplicaciones generan un archivo de recursos .RC2 además del archivo de recursos (.RC)
estándar. Este archivo .RC2 no está pensado para ser compilado por el compilador de recursos; realmente, contiene recursos
que el compilador de recursos no controla. Como ejemplos se incluyen el recurso personalizado HI_RES_AWARE y el recurso
RCDATA (datos de recurso de menú). El archivo .RC2 es el mejor lugar para colocar los demás recursos personalizados que no
se desea que el compilador de recursos edite de forma automática.
Para obtener más información sobre cómo crear recursos de menú para Smartphone, vea How to: Create a SoftKey Bar. Para
crear un menú de Smartphone, asegúrese de contar con una sección RCDATA. Normalmente, se encontrará en el archivo .RC2.
Los identificadores de recursos deben tener valores iguales o mayores que 100. Los identificadores se establecen en el archivo
de encabezado de recursos (resourcesp.h para Smartphone). Los botones deben tener NOMENU como índice (IDR_MENU
RCDATA). El ejemplo siguiente muestra este punto:

BEGIN
IDR_MENU,
2,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
IDS_OK, 0, NOMENU,
I_IMAGENONE, IDM_HELP, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE,
IDS_HELP, 0, 0,
END

Cuando trabaje con editores de recursos para dispositivos, puede obtener errores por las razones siguientes:
Porque ha editado un elemento RESX que pertenece a otro elemento de proyecto, como un formulario o un control de
usuario.
Porque el Diseñador de Windows Forms desecha automáticamente los elementos que no tienen un vínculo con un
control. También quita todos los comentarios, no admite elementos vinculados y no carga el formulario o el control de
usuario si se ha agregado uno al archivo RESX en el editor de recursos.
Porque algunos tipos de recursos, como los archivos Tiff, no se admiten en Windows CE.
Porque también se genera un error cuando el formato del archivo de recursos no es compatible, el archivo está vacío o el
formato está dañado.
Vea también
Otros recursos
Editores de recursos para proyectos de dispositivos
Desarrollo para Smart Device

Utilizar recursos en varias plataformas


Visual Studio 2005 permite tener un proyecto de dispositivos destinado a varias plataformas, como Pocket PC y Smartphone.
Debido a las diferencias de la interfaz de usuario (IU) entre las plataformas, cada una necesita su propio archivo de secuencias
de comandos de recursos (.rc) en el proyecto.
Varios archivos de recursos
Existen dos medios para poder establecer un proyecto de dispositivos destinado a varias plataformas:
Con los asistentes para aplicaciones en el momento de la creación del proyecto.
Después de la creación del proyecto.
Si selecciona varias plataformas de la página Plataformas en el asistente para aplicaciones del proyecto, se generará y se
configurará un archivo de recursos para cada una de ellas. Por ejemplo, si selecciona Pocket PC y Smartphone como
plataformas de destino, el archivo de recursos de Pocket PC se excluirá de la generación de la plataforma Smartphone, y el
archivo de recursos de Smartphone se excluirá de la generación de la plataforma Pocket PC.
Sin embargo, si agrega una plataforma después de la creación del proyecto, necesitará agregar manualmente una plataforma y
un archivo de recursos.
Agregar una nueva plataforma

Para agregar una nueva plataforma


1. En el menú Generar, haga clic en Administrador de configuración.
2. En el cuadro Plataforma de soluciones activas, haga clic en <Nueva...>.
3. Seleccione la plataforma que desee agregar al proyecto, seleccione la plataforma de la que desee copiar la configuración,
y haga clic en Aceptar.
Nota
Si copia la configuración de <Predeterminada>, las propiedades del proyecto para esa plataforma estarán vacías. Se r
ecomienda copiar la configuración de una plataforma similar y, a continuación, cambiar las propiedades del proyecto s
egún sea necesario. Por ejemplo, si agrega Smartphone como plataforma, copie la configuración de la plataforma Pock
et PC.

4. Haga clic en Cerrar.


Agregar un nuevo archivo de recursos
Ahora que tiene una nueva plataforma, necesitará agregar un archivo de recursos para esa plataforma.
Para agregar un archivo de recursos para una nueva plataforma
1. En el menú Proyecto, haga clic en Agregar nuevo elemento.
2. En el cuadro de diálogo Agregar nuevo elemento, haga clic en Recurso y, a continuación, haga clic en Archivo de
recursos (.rc) en el panel Plantillas.
3. En el cuadro Nombre, escriba un nombre para el archivo y haga clic en Agregar.
Se agregará al proyecto un nuevo archivo de encabezado (.h) que corresponde al nuevo archivo de secuencias de comandos
de recursos (.rc).
Excluir archivos de recursos de generaciones
Cuando se crea un proyecto para una plataforma de destino, no es deseable la inclusión de archivos de recursos de otra
plataforma. Puede excluir archivos de generaciones basadas en la plataforma de destino.
Para excluir archivos de recursos de generaciones
1. Haga clic con el botón secundario del mouse en el archivo de secuencias de comandos de recursos (.rc) y haga clic en
Propiedades.
2. En el cuadro Plataforma, seleccione la primera plataforma de la lista.
3. En la página de propiedades General, seleccione Sí en el cuadro Excluido de la generación si no desea que se incluya
este archivo .rc cuando se genere el proyecto para la plataforma seleccionada.
4. Repita el paso anterior para cada configuración de plataforma, asegurándose de excluir únicamente los archivos de
recursos que no pertenecen a la plataforma seleccionada.
5. Repita todos los pasos anteriores (1 a 4) para cada archivo .rc del proyecto.
En el Explorador de soluciones, observará la existencia de una marca roja en el icono de cada uno de los archivos excluidos
de la generación correspondiente a la plataforma seleccionada.
Cambiar las propiedades del proyecto de la configuración de la nueva plataforma
Ahora que los archivos de recursos están configurados para las plataformas, es necesario asegurarse de que las propiedades
del proyecto son correctas para la configuración de la nueva plataforma. Si ha copiado los valores de configuración de una
plataforma similar, es posible que no tenga que cambiar muchos valores, pero si ha seleccionado <Predeterminada>, tendrá
que agregar manualmente todos los valores de configuración. Para este ejemplo, puede suponer que ha agregado una nueva
plataforma Smartphone 2003 (ARMV4) al proyecto, y que ha copiado los valores de configuración de la plataforma Pocket
PC 2003 (ARMV4).
Para cambiar las propiedades del proyecto
1. En el menú Proyecto, haga clic en Propiedades.
2. Expanda el nodo C/C++ y haga clic en Preprocesador.
3. En el cuadro Definiciones del preprocesador, cambie POCKETPC2003_UI_MODEL a
SMARTPHONE2003_UI_MODEL, y haga clic en Aceptar.
Nota
Si ha agregado una plataforma diferente, o ha copiado la configuración de una plataforma diferente, puede que tenga
que cambiar más valores de configuración.

Agregar la directiva #ifdef al archivo de encabezado


El archivo de encabezado principal del proyecto necesita que se compruebe la definición del preprocesador del modelo de
interfaz de usuario que se estableció en el procedimiento anterior, y sólo incluye el archivo de recursos correspondiente.
Para agregar la directiva #ifdef al archivo de encabezado
1. Abra ProjectName.h.
2. A continuación de #ifdef para el modelo de interfaz de usuario de la plataforma original, agregue el código siguiente:

#ifdef SMARTPHONE2003_UI_MODEL
#include "ResourceFileName.h"
#endif

3.
Vea también
Otros recursos
Editores de recursos para proyectos de dispositivos
Desarrollo para Smart Device

Controles del cuadro de diálogo Dispositivo


Editor de cuadros de diálogo permite crear y editar recursos de cuadro de diálogo para proyectos de dispositivo de Visual C++
de un modo muy parecido al de los proyectos de escritorio de Visual C++. En esta sección se describen los dos controles
específicos de los dispositivos, así como los controles de escritorio comunes que admite el editor de cuadros de diálogo para
proyectos de dispositivos.
En esta sección
Controles de cuadro de diálogo admitidos en los dispositivos
Describe los controles de escritorio comunes que también admiten los dispositivos.
Controles de cuadro de diálogo únicos en los dispositivos
Describe los dos controles únicos de los dispositivos.
Vea también
Otros recursos
Editores de recursos para proyectos de dispositivos
Desarrollo para Smart Device

Controles de cuadro de diálogo admitidos en los dispositivos


El editor de cuadros de diálogo de dispositivos Visual Studio 2005 admite dos controles de dispositivo únicos además de los
controles comunes que admiten los proyectos de escritorio.
Controles admitidos
Los controles comunes siguientes se admiten en el editor de cuadros de diálogo para dispositivos:

Botón Barra de desplazamiento vertical

Casilla de verificación Slider Control

Control de edición Progress Control

Cuadro combinado Control de lista

Cuadro de lista Tree Control

Group Box Tab Control

Radio Button Date Time Picker

Static Text Month Calendar

Picture Control Control personalizado

Barra de desplazamiento horizontal

Para ver una lista actualizada de los controles de cuadro de diálogo que admiten los dispositivos, cree un proyecto de
dispositivo nativo de Win32 .exe, haga doble clic en el archivo RC file y, a continuación, expanda el nodo Diálogo para abrirlo.
Controles únicos de los dispositivos
El editor de cuadros de diálogo Visual Studio 2005 también agrega dos nuevos controles para el desarrollo de dispositivos.
Control Descripción
Control CAPEdit El control CAPEdit es un control de edición que pone en mayúscula la primera letra de cada pal
abra en el control.

Estado del panel de entrada ( El control State of Input Panel (Estado del panel de entrada) abre el panel de entrada en plataf
Control) ormas que lo admiten.

Vea también
Otros recursos
Controles del cuadro de diálogo Dispositivo
Desarrollo para Smart Device

Controles de cuadro de diálogo únicos en los dispositivos


Los cuadros de diálogo Estado del panel de entrada y Control CAPEdit son exclusivos de los dispositivos. Estos cuadros de
diálogo están diseñados para aprovechar las ventajas de las características únicas de los dispositivos.
En esta sección
Control CAPEdit
El control CAPEdit es un control de edición que pone en mayúsculas la primera letra escrita en el control.
Estado del panel de entrada (Control)
El Estado del control del panel de entrada muestra el panel de entrada en cualquier cuadro de diálogo.
Vea también
Otros recursos
Controles del cuadro de diálogo Dispositivo
Desarrollo para Smart Device

Control CAPEdit
El control CAPEdit se comporta como un control CEdit Class en todo menos en que la primera letra del mismo se pone en
mayúscula automáticamente. Este control simplifica el proceso de entrada de cadenas de caracteres largas y se utiliza a
menudo en situaciones en las que los usuarios necesitan especificar información que siempre debe escribirse en mayúsculas,
como los nombres y las ubicaciones.
Vea también
Referencia
CDialog Class
Otros recursos
Controles de cuadro de diálogo únicos en los dispositivos
Crear un control de edición
Desarrollo para Smart Device

Estado del panel de entrada (Control)


El control Estado del panel de entrada es un control no visual que muestra el panel de entrada en las plataformas que lo
admiten, como Pocket PC. Si este control se incluye en un cuadro de diálogo, el panel de entrada se activa cada vez que un
control de entrada recibe el foco. Cuando el control pierde el foco, el panel de entrada se desactiva.
Nota
La inclusión de más de un control Estado del panel de entrada en un cuadro de diálogo hace que las aplicaciones se bloqu
een en el dispositivo. Puede que este problema se trate en futuras versiones.

Vea también
Conceptos
Controles de cuadro de diálogo admitidos en los dispositivos
Otros recursos
Controles de cuadro de diálogo únicos en los dispositivos
Desarrollo para Smart Device

Compiladores para Smart Devices


Visual Studio 2005 incluye los compiladores siguientes destinados a los microprocesadores que se utilizan en dispositivos
inteligentes:
Compilador de C/C++ de 32 bits utilizado para compilar y vincular programas de C++ y ARM C de 32 bits.
Compilador de C/C++ de 32 bits utilizado para compilar y vincular programas de C++ y Renesas SH-4 C de 32 bits.
Compilador de C/C++ utilizado para compilar y vincular programas de C++, MIPS16, MIPS32 y MIPS64 C.
Los compiladores generan archivos objeto en formato de archivo objeto común. Los programas de compilador compilan cada
archivo de código fuente y, salvo que se especifique lo contrario, un archivo objeto para cada compilación. Los compiladores
incluyen las opciones enumeradas en la línea de comandos (CL), en la variable de entorno de CL y en los archivos de respuesta
especificados. Para obtener más información, vea el tema Compilers for Smart Devices de referencia.
El compilador de Visual Studio 2005 establece diferencias entre el escritorio y los dispositivos
Diferencia Description
Ficha Avanzadas, lista d Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable Comp
esplegable Compilar pa ilar para arquitectura, en el nodo C/C++, en el cuadro desplegable aparecen las siguientes opcione
ra arquitectura. s: Arm4 (/QRarch4), ARM5 (/QRarch5), Arm4t (/QRarch4t), ARM5t (/QRarch5t).

Ficha Avanzadas, lista d Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable ARM T
esplegable ARM Thumb humb y ARM Interwork en el nodo C/C++, en el cuadro desplegable aparecen las siguientes opcio
y ARM Interwork. nes: Sí (/QRInterwork-return) y la opción No. Cuando se establece a sí, el compilador genera códig
o thunk para el código ARM interwork de 16 y 32 bits.

Ficha Avanzadas, lista d Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable Habili
esplegable Habilitar em tar emulación de punto flotante en el nodo C/C++, en el cuadro desplegable aparecen las siguie
ulación de punto flota ntes opciones: Sí y No. Cuando se establece en Sí, el compilador habilita operaciones de emulación
nte. de punto flotante.

Ficha Preprocesador, cu Proyectos de dispositivos en Propiedades del proyecto, ficha Preprocesador, cuadro de texto de e
adro de texto de entrada ntrada Definiciones del preprocesador, en el nodo C/C++, hay una casilla de verificación para He
Definiciones del prepr redar de primario o valores pred. del proyecto y un botón Macros para agregar macros.
ocesador.

Ficha Optimización, list Proyectos de dispositivos en Propiedades del proyecto, ficha Optimización, lista desplegable Def
a desplegable Definicio iniciones de coherencia de punto flotante, en el nodo C/C++, aparece una lista desplegable para
nes de coherencia de seleccionar Coherencia predeterminada o Mejorar coherencia (/Op).
punto flotante.

Para obtener más información, vea Opciones del compilador, por orden alfabético.
Cambios del compilador entre Visual Studio 2003 y Visual Studio 2005
Debido a que los compiladores de dispositivos se basan en el compilador de Visual C++ para equipos de escritorio, examinar
las diferencias entre versiones de compiladores de escritorio proporciona una buena imagen de los cambios existentes entre
los compiladores de dispositivos de eMbedded Visual C++ y los compiladores de dispositivos de Visual Studio 2005. Para
obtener información sobre los cambios entre Visual Studio 6.0 y Visual Studio 2003, vea Standard Compliance Issues in Visual
C++.
En la tabla siguiente se resumen los cambios de compilador entre Visual Studio 2003 y Visual Studio 2005.
Problema Descripción
Los punteros a mi El código que se escribió para versiones anteriores del compilador que sólo utilizaba el nombre del método
embros requieren generará ahora el Error del compilador C3867 o la Advertencia del compilador C4867. La norma ISO C++ r
ahora el nombre c equiere este diagnóstico. Para crear un puntero a una función miembro, se deben utilizar el operador de dir
ompleto, el opera ección (&) y el nombre completo del método. Pueden producirse errores si no se requieren el operador &
dor de dirección ( y el nombre completo del método, o si se omiten paréntesis en las llamadas a funciones. El uso del nombre
&) y paréntesis en de la función sin una lista de argumentos produce un puntero a función que se puede convertir a varios tip
las llamadas a fun os. Por consiguiente, el código puede dar lugar a un comportamiento inesperado en tiempo de ejecución.
ciones.

Una clase debe ser Los compiladores anteriores de Visual C++ habilitaban una declaración friend a una clase que no era acces
accesible a una de ible en el ámbito de la clase que contenía la declaración. En Visual C++ 2005, estas circunstancias harán qu
claración friend. e el compilador genere el Error del compilador C2248. Para solucionarlo, se debe cambiar la accesibilidad d
e la clase que se especifica en la declaración friend. Este cambio se ha realizado para cumplir los requisitos
de la norma ISO C++.

No se permite la e El código que depende de una especialización explícita de plantilla para un constructor de copias o un oper
specialización expl ador de asignación de copia generará ahora el Error del compilador C2299. La norma ISO C++ prohíbe est
ícita como constru e uso. Este cambio se ha realizado por razones de compatibilidad y para mejorar la portabilidad del código.
ctor de copias ni c
omo operador de
asignación de copi
a.

Una plantilla de cl El uso del nombre de una clase de plantilla no especializada en la lista de clases base para una definición de
ase no especializa clase producirá el Error del compilador C3203. No se puede utilizar el nombre de una clase de plantilla no
da no se puede uti especializada como parámetro de plantilla en una lista de clases base. Se deben agregar explícitamente los
lizar como argum parámetros de tipo de plantilla al nombre de clase de plantilla cuando se utilice como parámetro de plantill
ento de plantilla e a en una lista de clases base. Este cambio se ha realizado por razones de compatibilidad y para mejorar la p
n una lista de clas ortabilidad del código.
es base.

Ya no se permite u El código que tiene una declaración using a un tipo anidado generará ahora el Error del compilador C2885.
na declaración usi Para solucionarlo, es necesario utilizar referencias completas a tipos anidados, colocar el tipo en un espacio
ng de tipo anidad de nombres o crear un objeto typedef. Este cambio se ha realizado por razones de compatibilidad y para
o. mejorar la portabilidad del código.

Se quita la opción La opción del compilador /YX generaba compatibilidad automática de los encabezados precompilados. Se
del compilador /Y utilizaba de manera predeterminada desde el entorno de desarrollo. Si se quita la opción del compilador /Y
X. X de las configuraciones de generación, puede que las generaciones sean más rápidas. Además de los prob
lemas de rendimiento, la opción del compilador /YX introduce la posibilidad de un comportamiento inespe
rado en tiempo de ejecución. Es preferible utilizar /Yc, Crear archivo de encabezado precompilado, y /
Yu, Utilizar archivo de encabezado precompilado, ya que proporciona un mayor control sobre la form
a de utilizar los encabezados precompilados.

Se quitan las opci Se han quitado las opciones del compilador /Oa y /Ow, y se omitirán. Utilice los modificadores noalias, re
ones del compilad strict o declspec para especificar cómo realiza el compilador el efecto escalonado (aliasing).
or /Oa y /Ow.

Se quita la opción Se ha quitado la opción del compilador /Op. Se puede utilizar /fp:precise en su lugar.
del compilador /O
p.

Se han quitado las Visual C++ 2005 ya no proporciona compatibilidad con la biblioteca CRT vinculada estáticamente de un ún
opciones del com ico subproceso. Se puede utilizar /MT y /MTd en su lugar.
pilador /ML y /ML
d.
Se han quitado las El compilador utiliza ahora un modelo mixto que intenta crear el mejor archivo de resultados para todas las
opciones del com arquitecturas.
pilador /G3, /G4, /
G5, /G6, /G7 y /G
B.

Se ha quitado la o Puede utilizar /GF en su lugar. /GF coloca las cadenas agrupadas en una sección de sólo lectura, que es má
pción del compila s segura que la sección de escritura donde las agrega /Gf.
dor /Gf.

Ahora, la opción p La comprobación del desbordamiento del búfer está activada de manera predeterminada. Puede desactivar
redeterminada del la comprobación de la saturación del búfer con /GS-.
compilador es /GS
.

La variable /Zc:wc Este es el comportamiento conforme a la norma ISO C++: El valor predeterminado de una variable wchar_t
har_t está ahora a será el tipo integrado en lugar de un entero corto sin signo. Este cambio interrumpirá la compatibilidad bin
ctivada de manera aria cuando el código de cliente se vincule a bibliotecas que se compilaron sin /Zc:wchar_t. Se puede utiliz
predeterminada. ar /Zc:wchar_t- para revertir al comportamiento anterior no conforme a la norma. Este cambio se ha intro
ducido para crear código compatible de manera predeterminada.

La variable /Zc:fo Este es el comportamiento conforme a la norma ISO C++: El código que depende del uso de una variable d
rScope está ahora eclarada en un bucle for después de la finalización del ámbito del bucle for ya no se compilará. Se puede u
activada de maner tilizar /Zc:forScope para revertir al comportamiento anterior no conforme a la norma. Este cambio se ha i
a predeterminada. ntroducido para crear código compatible de manera predeterminada.

Forzar la comprob El código que pasa atributos con nombre al constructor de atributos entre comillas cuando el tipo no es un
ación de parámetr a cadena, y sin comillas cuando el tipo es una cadena, generará ahora el Error del compilador C2065 o la A
os para los atribut dvertencia del compilador (nivel 1) C4581. Anteriormente, todos los atributos del compilador se analizaban
os de Visual C++. como cadenas y, si era necesario, el compilador insertaba las comillas inexistentes. La compatibilidad con at
ributos se ha mejorado al agregar la validación de comprobación de parámetros. Este cambio evitará que s
e produzca un comportamiento inesperado por pasar argumentos incorrectos a un constructor de atributo
s.

El compilador no i El código que omite el tipo en una declaración ya no tiene como tipo predeterminado int. El compilador ge
nsertará el tipo int nerará la Advertencia del compilador C4430 o la Advertencia del compilador (nivel 4) C4431. La norma ISO
como tipo predete C++ no admite un tipo int predeterminado y este cambio ayudará a garantizar que se obtiene el tipo espec
rminado en declar ificado explícitamente.
aciones.

Para obtener más información, vea Breaking Changes in the Visual C++ 2005 Compiler.
Vea también
Otros recursos
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Explicación de código: Código generado por el asistente en


proyectos de dispositivos de Visual C++
Las funciones y los asistentes de Visual C++ simplifican la mayoría de las tareas más comunes relacionadas con la generación
de aplicaciones de dispositivos multiplataforma, archivos de configuración y archivos de proyecto. Este tutorial describe el
código generado automáticamente para el usuario mediante el asistente para aplicaciones de dispositivos de Windows 32. Así
que, es posible extender y modificar las aplicaciones para Windows con el fin de satisfacer las necesidades del usuario.
Código generado por el asistente para una aplicación de dispositivos de Windows 32
Si está familiarizado con la programación de escritorio de Windows (win32), será posible marcar fácilmente las principales
rutinas generadas por el asistente.
En una aplicación normal de dispositivos de Windows, la entrada principal se encuentra en el archivo <yourprojectname>.cpp.
A continuación se proporciona una lista con ejemplos de este tipo.
Tras una ojeada rápida, puede verse que la aplicación cuenta con la siguiente funcionalidad principal:
Función WinMain
Función MyRegisterClass
Función InitInstance
Función About Dialog
Cada una de estas funciones aparece más detallada a continuación:
Función WinMain: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int
nCmdShow). Para obtener más información, vea Función WinMain.

int WINAPI WinMain(HINSTANCE hInstance,


HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;

// Perform application initialization:


if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}

Plataformas Win32. Para obtener más información, vea Win32 Platforms.

#ifndef WIN32_PLATFORM_WFSP
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WIN32SMARTDEVICE);
#endif // !WIN32_PLATFORM_WFSP

Bucles de mensajes. Para obtener más información, vea Message Handling and Command Targets.

// Main message loop:


while (GetMessage(&msg, NULL, 0, 0))
{
#ifndef WIN32_PLATFORM_WFSP
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
#endif // !WIN32_PLATFORM_WFSP
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;


}

La función MyRegisterClass registra la aplicación de la ventana.

// FUNCTION: MyRegisterClass()
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;

wc.style = CS_HREDRAW | CS_VREDRAW;


wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32SMARTDEVICE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;

return RegisterClass(&wc);
}

InitInstance: FUNCTION InitInstance(HANDLE, int) Para obtener más información, vea InitInstance Member Function.

WIN32_PLATFORM_WFSP se utiliza como una condición para Smartphone y WIN32_PLATFORM_PSPC para Pocket PC. Siempre
es posible definir los propios condicionales si se desea establecer grandes diferencias.

// FUNCTION: InitInstance(HANDLE, int)


// PURPOSE: Saves instance handle and creates main window.
// COMMENTS:
// In this function, we save the instance handle in a global
// variable and create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING];
// title bar text
TCHAR szWindowClass[MAX_LOADSTRING];
// main window class name

g_hInst = hInstance;
// Store instance handle in your global variable.

#ifdef WIN32_PLATFORM_PSPC
// SHInitExtraControls should be called once during your application's initializat
ion to initialize any
// of the Pocket PC special controls such as CAPEDIT and SIPPREF.
SHInitExtraControls();
#endif // WIN32_PLATFORM_PSPC

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);


LoadString(hInstance, IDC_WIN32SMARTDEVICE, szWindowClass, MAX_LOADSTRING);

#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)


//If it is already running, then focus on the window, and exit.
hWnd = FindWindow(szWindowClass, szTitle);
if (hWnd)
{
// Set the focus to the foremost child window.
// The "| 0x00000001" is used to bring any owned windows
//to the foreground and activate them.
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return 0;
}
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP

if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}

hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,


CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInsta
nce, NULL);

if (!hWnd)
{
return FALSE;
}

#ifdef WIN32_PLATFORM_PSPC
// When the main window is created using CW_USEDEFAULT,
// the height of the menubar is not taken into account.
// So the generated code resizes the window after creating it.
if (g_hWndMenuBar)
{
RECT rc;
RECT rcMenuBar;

GetWindowRect(hWnd, &rc);
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);

MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);


}
#endif // WIN32_PLATFORM_PSPC

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

También se genera un cuadro de diálogo Acerca de para una determinada aplicación como un ejemplo sobre cómo
generar otros cuadros de diálogo que se podría desear: LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM
wParam, LPARAM lParam).

// win32smartdevice.cpp : Defines the entry point for the application.


#include "stdafx.h"
#include "win32smartdevice.h"
#include <windows.h>
#include <commctrl.h>

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE g_hInst;
// Current instance:
HWND g_hWndMenuBar;
// Menu bar handle

// Forward declarations of functions included in this code module:


ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#ifndef WIN32_PLATFORM_WFSP
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
#endif
// !WIN32_PLATFORM_WFSP
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
// PURPOSE: Processes messages for the main window.
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return

Algunos de los principales mensajes, como WM_COMMAND, ya están incluidos para su uso y para su extensibilidad. Se
incluye WinProc para mensajes de entrada del usuario y del sistema de procesamiento: LRESULT CALLBACK WndProc(HWND
hWnd, UINT message, WPARAM wParam, LPARAM lParam. Para obtener más información sobre WinProc, vea Información
general sobre Windows.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HGDIOBJ hbrWhite, hbrGray;
POINT aptStar[6] = {50,2, 2,98, 98,33, 2,33, 98,98, 50,2};

#if defined(SHELL_AYGSHELL) && !defined(WIN32_PLATFORM_WFSP)


static SHACTIVATEINFO s_sai;
#endif // SHELL_AYGSHELL && !WIN32_PLATFORM_WFSP
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
#ifndef WIN32_PLATFORM_WFSP
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
#endif // !WIN32_PLATFORM_WFSP
#ifdef WIN32_PLATFORM_WFSP
case IDM_OK:
DestroyWindow(hWnd);
break;
#endif // WIN32_PLATFORM_WFSP
#ifndef WIN32_PLATFORM_WFSP
case IDM_OK:
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
#endif // !WIN32_PLATFORM_WFSP
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
#ifdef SHELL_AYGSHELL
SHMENUBARINFO mbi;

memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;

if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}

#ifndef WIN32_PLATFORM_WFSP
// Initialize the shell activate info structure
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
#endif // !WIN32_PLATFORM_WFSP
#endif // SHELL_AYGSHELL
hbrWhite = GetStockObject(WHITE_BRUSH);
hbrGray = GetStockObject(GRAY_BRUSH);
return 0L;
break;
case WM_PAINT:
RECT rc;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc);
Polyline(hdc, aptStar, 6);
EndPaint(hWnd, &ps);
return 0L;

break;
case WM_DESTROY:
#ifdef SHELL_AYGSHELL
CommandBar_Destroy(g_hWndMenuBar);
#endif // SHELL_AYGSHELL
PostQuitMessage(0);
break;

#if defined(SHELL_AYGSHELL) && !defined(WIN32_PLATFORM_WFSP)


case WM_ACTIVATE:
// Notify shell of your activate message.
SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
break;
#endif // SHELL_AYGSHELL && !WIN32_PLATFORM_WFSP

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

#ifndef WIN32_PLATFORM_WFSP
// Message handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
#ifdef SHELL_AYGSHELL
{
// Create a Done button and size it.
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFUL
LSCREEN | SHIDIF_EMPTYMENU;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
}
#endif // SHELL_AYGSHELL

return TRUE;

case WM_COMMAND:
#ifdef SHELL_AYGSHELL
if (LOWORD(wParam) == IDOK)
#endif
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;

case WM_CLOSE:
EndDialog(hDlg, message);
return TRUE;

#ifdef _DEVICE_RESOLUTION_AWARE
case WM_SIZE:
{
DRA::RelayoutDialog(
g_hInst,
hDlg,
DRA::GetDisplayMode() != DRA::Portrait ? MAKEINTRESOURCE(IDD_ABOUTBO
X_WIDE) : MAKEINTRESOURCE(IDD_ABOUTBOX));
}
break;
#endif
}
return FALSE;
}
#endif // !WIN32_PLATFORM_WFSP

Vea también
Tareas
Tutorial: Crear un formulario Windows Forms sencillo
Referencia
General, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Cuadro de herramientas
Otros recursos
Tutoriales sobre dispositivos inteligentes
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Cómo: Especificar la ruta de acceso remota del resultado


principal del proyecto
Se puede establecer el Directorio remoto para la implementación del proyecto utilizando las páginas de propiedades del
proyecto de dispositivos. El Directorio remoto especifica el directorio de dispositivos donde se implementa el resultado de la
aplicación.
De forma predeterminada, el Directorio remoto se establece en %CSIDL_PROGRAM_FILES%\<Nombre de proyecto>. La
primera parte es un valor de CSIDL y la segunda es el nombre del proyecto. Los valores de CSIDL proporcionan un medio
independiente del sistema para identificar carpetas de Directorio remoto. Estos valores reemplazan el uso de variables de
entorno para este fin. En la tabla siguiente se enumeran los valores de CSIDL válidos para el parámetro Directorio remoto.
Utilice signos de porcentaje (%) para encapsular el valor.

CSIDL Val Descripción


or

CSIDL_DESKT 0x0 No se admite en Smartphone.


OP 000

CSIDL_FAVO 0x0 Directorio del sistema de archivos que actúa como repositorio común de los elementos favoritos del usuari
RITES 006 o.

CSIDL_FONT 0x0 Carpeta virtual que contiene fuentes.


S 014

CSIDL_PERSO 0x0 Directorio del sistema de archivos que actúa como repositorio común de documentos.
NAL 005

CSIDL_PROG 0x0 Carpeta de archivos de programa.


RAM_FILES 026

CSIDL_PROG 0x0 Directorio del sistema de archivos que contiene los grupos de programas del usuario, que también son los
RAMS 002 directorios del sistema de archivos.

CSIDL_START 0x0 Directorio del sistema de archivos que corresponde al grupo de programas de inicio del usuario. El sistema
UP 007 inicia estos programas cuando se conecta la alimentación de un dispositivo.

CSIDL_WIND 0x0 Carpeta Windows.


OWS 024

Para especificar la ruta de acceso remota para el resultado principal del proyecto
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto> y, a
continuación, haga clic en Propiedades en el menú contextual.
2. Expanda el nodo Propiedades de configuración y haga clic en Implementación.
3. En el panel situado más a la derecha, establezca la propiedad Directorio remoto del proyecto.
Vea también
Otros recursos
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Cómo: Cambiar el dispositivo predeterminado (proyectos


nativos)
Siga los pasos que se indican a continuación para cambiar el dispositivo de destino predeterminado en proyectos nativos.
Para seleccionar un nuevo dispositivo de destino predeterminado para un proyecto nativo
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto>.
2. En el menú contextual, haga clic en Propiedades.
3. En el cuadro de diálogo Propiedades, expanda Propiedades de configuración y, a continuación, haga clic en
Implementación.
4. En la lista desplegable, cambie el valor de la propiedad Implementación para seleccionar un nuevo dispositivo de
destino predeterminado.
Vea también
Tareas
Cómo: Cambiar el dispositivo predeterminado (Proyectos administrados)
Referencia
Implementar (Cuadro de diálogo, Dispositivos)
Otros recursos
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Generar y depurar proyectos de dispositivos de Visual C++


Generar y depurar los proyectos de dispositivos son procesos algo distintos a los de generación y depuración de proyectos de
escritorio. Esta sección contiene temas que explican esas diferencias.
La siguiente es una lista de técnicas de generación y depuración:
El modelo de subprocesos para el proyecto de dispositivos es libre de forma predeterminada. No obstante, Windows CE
no es totalmente compatible con el cálculo de referencias COM y las definiciones asociadas si no se elige la opción
DCOM al generar la imagen del SO CE. Por consiguiente, en algunas plataformas CE, el compilador puede generar
advertencias sobre la compatibilidad con DCOM y la definición de subprocesamiento múltiple y simple. El objeto de esta
advertencia es aconsejarle sobre cómo controlar el subprocesamiento y la sincronización en su propio código. Por
ejemplo, al compilar un proyecto de dispositivo de ATL, el compilador puede emitir una advertencia sobre la definición
de _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA. Es el mismo caso que el de la creación de objetos COM
consumiendo servicios Web, además de objetos ATL COM en la plataforma de Windows Mobile. Puede definir este
indicador en el archivo de encabezado para objetos de un único subproceso del siguiente modo: #define
_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA. Si su código está controlando el subprocesamiento múltiple, puede omitir
esta advertencia sin ningún riesgo. Para obtener más información sobre COM, DCOM y otros modelos de
subprocesamiento en Windows CE, consulte Subprocesos y procesos COM y Servicios de componentes (COM y DCOM),
en la documentación de Windows CE 5.0.
Las aplicaciones de dispositivos nativos se crean con vínculos estáticos de forma predeterminada. Puede agregar los
siguientes archivos DLL en tiempo de ejecución a la propiedad de proyecto Archivos adicionales si elige cambiar a los
vínculos dinámicos:
Las aplicaciones MFC liberan configuraciones de generación: agregue los siguientes archivos DLL en tiempo de
ejecución a la propiedad de proyecto Archivos adicionales:
msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;MFC80U.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;
Las aplicaciones MFC depuran configuraciones de generación: agregue los siguientes archivos DLL en tiempo de
ejecución a la propiedad de proyecto Archivos adicionales:
msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;MFC80Ud.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;
Las aplicaciones ATL liberan configuraciones de generación: agregue los siguientes archivos DLL en tiempo de
ejecución a la propiedad de proyecto Archivos adicionales:
msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;
Las aplicaciones ATL depuran configuraciones de generación: agregue los siguientes archivos DLL en tiempo de
ejecución a la propiedad de proyecto Archivos adicionales:
msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\
<nombreProyecto>|0;
Para obtener más información sobre cargar el archivo DLL de Windows CE, consulte Cargar DLL de Windows CE
LoadLibrary.
Nota
Si se cargan varios archivos DLL de distintos directorios con el mismo nombre y al mismo tiempo, por ejemplo,
\Windows\aDLL.dll y \Program Files\aDLL.dll, pueden producirse resultados imprevisibles. Se recomienda carg
ar una copia de un archivo DLL cada vez o esperar a llamar al primer archivo DLL cargado.
Algunas consideraciones adicionales:
Al trasladar a MFC 8.0 #, defina _WIN32_WCE_PSPC. Este indicador no está definido de forma predeterminada en
MFC8.0.
La opción ARM4T no se admite si el destino es Pocket PC 2003 o Smartphone 2003 en la lista desplegable Compilar
para arquitectura. Esta lista se encuentra en el cuadro de diálogo Páginas de propiedades de <nombre proyecto>
al hacer clic en Propiedades de configuración, C/C++ y Avanzado, y seleccionar Compilar para arquitectura.
Las funciones GAPI se pueden utilizar en C++ pero no en C. La inclusión de gx.h en el código sólo funciona desde C++. Si
está utilizando GAPI en el código, no utilice la opción /TC del compilador.
En MFC 8.0 para dispositivos, puede controlar la creación e inserción de CommandBar. El miembro
CDialog::m_pWndEmptyCB ya no se admite. Este miembro se utilizaba para señalar al CCommandBar (Clase) vacío,
también denominado MenuBar en Pocket PC, que se creaba para el cuadro de diálogo y al que se podía hacer referencia
para insertar su propia MenuBar.
Checked::_strlwr_s, _strlwr_s_l, _mbslwr_s, _mbslwr_s_l, _wcslwr_s, _wcslwr_s_l, Checked::tcslwr_s y
Checked::gcvt_s se proporcionan para plataformas Windows CE, y los métodos CRT subyacentes serán seguros en
futuras versiones para maximizar la seguridad.
El indicador _WIN32_WCE_PSPC aún no está definido; puede utilizar el indicador _WIN32_WCE_PSPC
WIN32_PLATFORM_PSPC como solución.
Para el traslado de la aplicación STL, incluya <deque> en lugar de #include <deque.h>.

Como el entorno de desarrollo puede utilizarse en varias plataformas, al alojar objetos ActiveX ATL o MFC en un
proyecto de dispositivo y en un recurso de cuadro de diálogo, deberá crear y registrar un control en un proyecto Active X
de escritorio equivalente para que se pueda agregar a la plantilla de cuadro de diálogo de dispositivo en el editor de
recursos y ejecutarse correctamente. El escritorio y las versiones de dispositivo del control ActiveX debería tener el
mismo GUID y las mismas propiedades en tiempo de diseño, como el color de fondo.
En esta sección
Configuración de depuración e implementación de los proyectos de dispositivos de Visual C++
Explica las propiedades de depuración e implementación únicas de los proyectos de dispositivo de Visual C++.
Vea también
Referencia
Depurar, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo, Dispositivos)
Conceptos
Configuración de depuración e implementación de los proyectos de dispositivos de Visual C++
Otros recursos
Depurar proyectos de dispositivos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Configuración de depuración e implementación de los


proyectos de dispositivos de Visual C++
Los proyectos de dispositivo de Visual C++ admiten propiedades no compatibles con los proyectos de escritorio de Visual
C++. Estas propiedades se configuran en la página de propiedades del proyecto.
Páginas de propiedades únicas
Los proyectos de dispositivo de Visual C++ tienen las siguientes páginas de propiedades únicas:
Depurar, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo,
Dispositivos)
Características de IDE compatibles con el empaquetado de aplicaciones para dispositivos
Panel Depuración, Diseñador de proyectos
Para obtener más información sobre las páginas de propiedades, vea Generar y depurar proyectos de dispositivos de
Visual C++ y Páginas de propiedades (C++).

Tener acceso a las propiedades del proyecto de dispositivo de Visual C++


Puede tener acceso a las páginas de propiedades del proyecto de dispositivos de las siguientes formas:
En Explorador de soluciones, haga clic con el botón secundario en el proyecto y, a continuación, haga clic en
Propiedades.
En Explorador de soluciones, haga clic en el nombre del proyecto, y a continuación en el Menú Proyecto, haga clic en
Propiedades.
Nota
Al depurar un proyecto de ATL .exe, por ejemplo, cuando el destino del desarrollo es Windows CE 5.0 SDK con compati
bilidad con DCOM, establezca la opción Registrar resultados de las Propiedades del proyecto en SÍ y agregue /Reg
Server a la propiedad Comando. Esto registrará .exe cuando se inicie la depuración. Para obtener más información, ve
a Implementación, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálog
o, Dispositivos).

Nota
Al desarrollar un proyecto de dispositivo nativo, puede que los proyectos dependientes no se desarrollen automáticam
ente con el proyecto de dispositivo nativo y que requieran una implementación independiente.

Vea también
Otros recursos
Generar y depurar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Depurar proyectos de dispositivos


La depuración de proyectos que se ejecutan en Smart Devices es muy similar a la depuración de proyectos que se ejecutan en
el escritorio. Una diferencia obvia es que el procesador donde se lleva a cabo la depuración en un proyecto de dispositivos no
tiene lugar en el equipo de desarrollo y, por lo tanto, los aspectos relacionados con la conexión juegan un papel importante en
la depuración de dispositivos.
Los temas de esta sección resumen las diferencias encontradas a partir de una depuración de proyectos de escritorio y
proporcionan algunas sugerencias útiles para la depuración en un dispositivo.
Nota de seguridad
La depuración de aplicaciones en un dispositivo o emulador con información confidencial o importante puede hacer que se c
orran riesgos relacionados con la seguridad.

En esta sección
Diferencias entre depuradores de dispositivos y de escritorio
Describe áreas donde la experiencia de la depuración en dispositivos difiere de la depuración de escritorio.
Cómo: Conectar a procesos de dispositivos administrados
Describe cómo agregar procesos administrados que ya se están ejecutando.
Cómo: Cambiar la configuración del Registro en un dispositivo
Describe la utilización del Editor de Registro remoto para cambiar la configuración del Registro en el dispositivo.
Tutorial: Depurar una solución que incluye código administrado y código nativo
Describe los pasos para iniciar como alternativa los depuradores nativos y administrados.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Depurar y generar perfiles de aplicaciones
Mobile Developer Center
Desarrollo para Smart Device

Diferencias entre depuradores de dispositivos y de escritorio


Los depuradores de dispositivos admiten la mayoría de las mismas características que los depuradores de escritorio, con las
siguientes excepciones.
Tareas Editar y Continuar no admitidas
Los depuradores de dispositivos no admiten la capacidad para editar el origen y continuar mientras se encuentran en modo de
interrupción. Si desea modificar su código mientras éste se encuentra en depuración, es necesario detener dicha depuración,
editar el código correspondiente y, a continuación, reiniciar con los orígenes modificados. Si se intenta cambiar el código
mientras éste se encuentre en modo de interrupción, el depurador emitirá una advertencia.
Evaluación de función no admitida en depurador nativo
El depurador de dispositivos nativo no admite la función de evaluación. No es posible escribir en una expresión con una
función y que tenga la función evaluada y los resultados devueltos.
El depurador de dispositivos administrado admite la evaluación de función.
Limitaciones en la depuración de la interoperabilidad
No se puede depurar código nativo y administrado dentro de una sola instancia del depurador.
Para depurar aplicaciones que tengan código administrado y código nativo mezclados (o código administrado que utilice
pInvoque), establezca puntos de interrupción en cada sección donde desee comenzar a recorrer paso a paso el código en
cuestión. A continuación, agregue cualquier depurador necesario para una determinada sección (por ejemplo, una sección
administrada). Quite ese depurador y agregue el otro cuando sea necesario. Puede repetir estos pasos de asociación y
desasociación tantas veces como sea necesario para recorrer el programa. Para obtener más información, vea Tutorial:
Depurar una solución que incluye código administrado y código nativo.
La utilización de las dos instancias de depuración al mismo tiempo y en el mismo proceso no puede admitirse en este
momento.
Depuración basada en atributos no admitida
Actualmente .NET Compact Framework no admite la depuración basada en atributos. De tal forma que la capacidad para
definir los atributos para los visualizadores (y otros dispositivos) no está disponible para los usuarios de los depuradores de
dispositivos.
Depuración de escritorio no admitida
No se pueden utilizar los depuradores de dispositivos para depurar aplicaciones escritas para el escritorio. En su lugar, utilice
los depuradores de escritorio.
Depuración de núcleo no admitida
No se pueden utilizar los depuradores de dispositivos para la depuración del núcleo.
Depuración de Sólo mi código no admitida
No se puede utilizar la depuración de Sólo mi código.
Adiciones al depurador en tiempo de ejecución (Cordbg.exe)
El Depurador en tiempo de ejecución ayuda a los proveedores de herramientas y a los desarrolladores de aplicaciones a
encontrar y corregir los errores que pueden producirse en programas orientados a Common Language Runtime (CLR) de .NET
Framework. Los proyectos de dispositivos agregan un comando y un argumento de modo nuevos al depurador en tiempo de
ejecución. La sintaxis del nuevo comando y argumento de modo (en una sesión de Cordbg.exe) se explica en la tabla siguiente.
Para más información y la sintaxis completa, vea Depurador en tiempo de ejecución (Cordbg.exe).
Comando Descripción
m[ode] Embedd EmbeddedCLR es un argumento de modo que establece el depurador para dirigirse a proyectos de dispositi
edCLR {0|1} vos. Para controlar este valor de configuración, especifique 1 para on o 0 para off.
conn[ect] machi Conecta a un dispositivo del CLR incrustado remoto.
ne_name port
Parámetros:
Machine_name
Requerido. Nombre o dirección IP del equipo remoto.
Port
Requerido. Puerto utilizado para la conexión con el equipo remoto.

Problemas de conexión
La desconexión del dispositivo mientras se está ejecutando el depurador causa el cierre de éste por error de conexión. El error
de conexión ocurre porque la aplicación sigue ejecutándose en segundo plano en el dispositivo. El botón X del Pocket PC es un
dispositivo inteligente que minimiza la característica y no cierra la aplicación. En su lugar, establece la aplicación para ejecutar
en segundo plano.
Para cerrar correctamente una aplicación para que se está ejecutando en segundo plano en Pocket PC, en el menú Inicio,
seleccione Configuración, seleccione la ficha Sistema y, a continuación, seleccione Memoria. En la ficha Programas
ejecutándose, seleccione la aplicación que desea cerrar y, además, seleccione Detener.
Vea también
Otros recursos
Guía básica del depurador
Depurar proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Conectar a procesos de dispositivos administrados


Es posible asociarse al proceso de un dispositivo de la misma manera en la que se haría en el escritorio, con la excepción de
que es necesario establecer la clave de Registro en el dispositivo con el fin de que sea posible llevar a cabo la depuración
administrada en caso de que el proceso ya se esté ejecutando sin el depurador. La configuración de esta clave permanece sin
cambios hasta que el usuario decida cambiarla, en caso de que un emulador se cierre sin guardar los cambios.
Nota
El establecimiento de una clave de depuración de dispositivos reduce el rendimiento. Si no se está realizando ninguna depur
ación, hay que restablecer la clave.

Aparece un mensaje de error si se intenta agregar dos depuradores o si se intenta para tales efectos utilizar un depurador
administrado cuando no se ha establecido la clave de Registro de dispositivos.
Es posible iniciar un proceso de varias formas, incluyendo el Explorador de archivos, la línea de comandos, etcétera. En el
siguiente paso, hay que iniciar el proceso partiendo del menú Depurar. También es posible iniciar un proceso sin el depurador
administrado y, a continuación, agregarlo.
Si se establece como destino una plataforma de Windows CE generada a partir del generador de plataformas, es necesario
contar con la biblioteca toolhelp.dll para rellenar el panel Procesos disponibles. Esta biblioteca se incluye en los SDK de
Windows Mobile.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Depurar un proceso administrado


Para depurar un proceso administrado
En el menú Depurar, haga clic en Iniciar.
Nota
Si se opta por separase de aquellos procesos iniciados desde el menú Depurar, no es posible volver a asociarse sin rea
lizar los siguientes pasos una vez que el proceso está en plena ejecución. Es decir, es necesario establecer la clave de Re
gistro en el dispositivo.

Asociarse a un proceso administrado ya en ejecución


Si piensa asociarse a un proceso ya en ejecución, por ejemplo, haciendo clic en Iniciar sin depurar y, a continuación, se asocia
a un proceso administrado en ejecución, primero es necesario establecer la clave de Registro de los dispositivos antes de que
se inicie el proceso y antes de que el usuario intente asociarse utilizando el cuadro de diálogo Asociar al proceso. En los
siguientes pasos se detalla el proceso.
Para establecer la clave de Registro de dispositivos con el fin de habilitar el hecho de asociarse a un
proceso en ejecución
1. En el menú Inicio de Windows, seleccione Todos los programas, Microsoft Visual Studio 2005, Visual Studio Tools
y, a continuación, haga clic en Remote Registry Editor.
2. Con Remote Registry Editor, conéctese al dispositivo.
3. Desplácese por o cree la siguiente clave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETCompactFramework\Managed Debugger
4. Establezca o cree un valor DWORD denominado AttachEnabled.
5. Establezca los datos para el valor en 1.
Nota
El establecimiento de una clave de depuración de dispositivos reduce el rendimiento. Si no se está llevando a cabo una
depuración, deshabilite cualquier tipo de asociación administrada, restableciendo los valores de los datos en 0 o borran
do el valor AttachEnabled.

6. Cierre Remote Registry Editor.


Ahora la asociación administrada se encuentra habilitada y el usuario podrá iniciar el proceso sin el depurador y, a
continuación, dicho usuario podrá asociarse al proceso utilizando el cuadro de diálogo Asociar al proceso.
Para asociarse a un proceso administrado una vez que el proceso en cuestión se encuentre en
ejecución
1. Tras establecer la clave de Registro tal y como se describe en los pasos anteriores, inicie un proceso sin hacer uso del
depurador.
2. En el menú Herramientas, haga clic en Asociar al proceso.
3. En el cuadro Transporte, haga clic en Smart Device.
4. En el cuadro Calificador, haga clic en Examinar.
Nota
El cuadro Calificador se encuentra relleno con los dispositivos utilizados más recientemente en la sesión actual.

5. En el cuadro de diálogo Conectar con dispositivo, seleccione la plataforma, el dispositivo y, a continuación, haga clic en
Conectar.
6. En el panel Procesos disponibles, seleccione uno o más procesos a los que desee asociarse y, a continuación, haga clic
en Asociar.
Nota
De manera predeterminada, el tipo de código se establece automáticamente en Administrado (.NET Compact Frame
work) si se encuentra disponible, de lo contrario se establece en Nativo (Smart Device). Para reemplazar los valores
de configuración predeterminados, haga clic en Seleccionar para abrir el cuadro de diálogo Seleccionar tipo de cód
igo. Obsérvese que no se pueden seleccionar ambas opciones.

Nota
No se admite la depuración de interoperabilidad. Es decir, no se puede realizar una depuración de los tipos de código a
dministrado y nativo al mismo tiempo.

Desasociar de o finalizar un proceso


Para desasociarse de o terminar un proceso
1. En el menú Depurar, seleccione Windows y, a continuación, haga clic en Procesos.
2. En la ventana Procesos, haga clic con el botón secundario del mouse en el proceso que desee terminar o del que desee
desasociarse.
3. En el menú contextual, haga clic en Terminar el proceso o en Desasociar del proceso.
Nota
Es posible volver a abrir el cuadro de diálogo Asociar al proceso desde este mismo menú contextual.
Rellenar el panel de procesos disponibles
Para rellenar el panel Procesos disponibles en los proyectos de Windows CE
Incluya el archivo toolhelp.dll en la imagen del SO de Windows CE.
— o bien —
Copie manualmente el archivo toolhelp.dll en el dispositivo de destino.
Vea también
Tareas
Tutorial: Depurar una solución que incluye código administrado y código nativo
Otros recursos
Depurar proyectos de dispositivos
Generar y depurar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Cómo: Cambiar la configuración del Registro en un dispositivo


Utilice Remote Registry Editor para cambiar la configuración del Registro en el dispositivo.
Para cambiar la configuración del Registro
1. En el menú Inicio de Windows, seleccione Todos los programas, Visual Studio 2005, Herramientas remotas de
Visual Studio y, a continuación, haga clic en Remote Registry Editor.
2. En la ventana Seleccionar un dispositivo Windows CE, haga clic en el dispositivo de destino cuyo Registro desee
editar.
En el panel izquierdo del Editor del Registro aparece un nodo que representa el Registro del dispositivo de destino.
3. Expanda el nodo para realizar los cambios pertinentes.

Vea también
Otros recursos
Depurar proyectos de dispositivos
Desarrollo para Smart Device

Tutorial: Depurar una solución que incluye código


administrado y código nativo
Este tutorial muestra los pasos para depurar una solución que incluye componentes administrados, de .NET Compact
Framework, y nativos. Visual Studio 2005 no admite la depuración de interoperativa de aplicaciones de dispositivos como
tales. Es decir, no es posible asociar depuradores administrados y nativos al mismo tiempo.
La técnica recomendada para depurar una solución que incorpore tanto elementos nativos como elementos administrados es
asociar el depurador necesario para una sección concreta (por ejemplo, una sección administrada y, a continuación, desasociar
ese depurador y asociar el otro cuando sea necesario). Puede repetir estos pasos de asociación y desasociación tantas veces
como sea necesario para recorrer el programa.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar su configuración, elija Importar y exportar configuraciones en el menú Herramientas.
Para obtener más información, vea Valores de configuración de Visual Studio.

Este tutorial ha sido escrito utilizando la configuración de desarrollo de Visual C#. Contiene las siguientes secciones:
Habilitar la asociación del depurador administrado
Iniciar la aplicación
Establecer un punto de interrupción en el código nativo
Asociar con el depurador nativo
Ejecutar el punto de interrupción nativo
Asociar con el depurador administrado
Establecer un punto de interrupción en el código administrado
Ejecutar hasta el punto de interrupción administrado
Conclusión
Requisitos previos
Este tutorial se basa en una solución generada con otro tutorial, Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para
Smart Devices. Asegúrese de que el tutorial Hola a todos se ha generado y ejecutado correctamente.
Habilitar la asociación del depurador administrado
De forma predeterminada, los dispositivos (incluidos los emuladores) no permiten al depurador administrado asociarse a
procesos que ya se están ejecutando. La asociación del depurador administrado a un proceso que ya está en ejecución es una
situación que suele darse en las soluciones de dispositivos que incluyen tanto código administrado como código nativo.
Por tanto, el primer paso es configurar el dispositivo para permitir que el depurador administrado se asocie a un proceso que
ya se está ejecutando. Esto se hace estableciendo una clave del Registro en el dispositivo.
Nota
El establecimiento de la clave afecta sólo a la asociación de procesos administrados que ya estén en ejecución. No afecta al la
nzamiento de un proyecto utilizando Iniciar con depuración (F5). No obstante, si se desasocia después de Iniciar con dep
uración, necesitará este proceso para volver a asociar e iniciar de nuevo la depuración.

Para permitir que el depurador administrado se asocie a un proceso en ejecución


1. En el menú Inicio de Windows, seleccione Todos los programas, Visual Studio 2005, Herramientas remotas de
Visual Studio y, a continuación, haga clic en Remote Registry Editor.
2. En la ventana Seleccionar un dispositivo Windows CE, expanda Pocket PC 2003 y, a continuación, haga clic en
Pocket PC 2003 SE - Emulador. Éste es el dispositivo de destino para este tutorial.
3. Haga clic en Aceptar.
Se abrirá la ventana de progreso Estableciendo conexión con el dispositivo y, a continuación, se abrirá el emulador
del dispositivo y el editor de registro remoto de Windows CE.
4. En el Editor del Registro, expanda Pocket PC 2003 SE - Emulador y, a continuación, cree la clave siguiente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETCompactFramework\Depurador administrado.
Cree la clave haciendo clic con el botón secundario en .NETCompactFramework, seleccionando Nuevo y haciendo clic
en Clave.
Observe que hay un espacio entre "Depurador" y "administrado".
5. Cree un valor DWORD denominado AttachEnabled.
Cree el valor DWORD haciendo clic con el botón secundario en Depurador administrado, seleccionando Nuevo y
haciendo clic en Valor DWORD.
6. Establezca el Nombre como AttachEnabled y el Valor como 1.
Nota
El establecimiento de esta clave de depuración de dispositivos reduce considerablemente el rendimiento. Cuando no es
té depurando, deshabilite esta funcionalidad restableciendo el valor de datos en 0.

7. Deje abierto el emulador del dispositivo para conservar la configuración del Registro en los pasos siguientes. Puede
cerrar el Editor del Registro.
Iniciar la aplicación
El paso siguiente es iniciar la aplicación de InteropSolution.
Para iniciar la aplicación
1. Abra la solución que creó en Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para Smart Devices.
Asegúrese de que el Pocket PC 2003 SE - Emulador aparece en el cuadro Dispositivo de destino en la barra de
herramientas.
2. En el menú Depurar de Visual Studio, haga clic en Iniciar depuración o presione F5.
Este paso implementa inmediatamente el proyecto nativo, HelloCOMObject, en el emulador sin que se necesaria ninguna
otra intervención del usuario.
3. Cuando se abra el cuadro de diálogo Implementar SayHello, seleccione Pocket PC 2003 SE - Emulador y haga clic en
Implementar.
Este paso implementa el proyecto administrado.
La aplicación se abre en el emulador. No haga clic todavía en el botón.
Establecer un punto de interrupción en el código nativo
El paso siguiente es establecer un punto de interrupción en el código nativo para preparar la asociación del depurador nativo.
Establecer un punto de interrupción en el código nativo
1. En el Explorador de soluciones, haga clic con el botón secundario en Hello.cpp y, a continuación, en el menú
contextual, haga clic en Ver código.
2. Inserte un punto de interrupción en la línea que comienza por *text haciendo clic en el margen izquierdo del Editor de
código.
El símbolo de punto de interrupción aparecerá como un círculo vacío con un signo de exclamación, indicando que el
punto de interrupción no se puede resolver en estos momentos. Esto se debe a que le faltan los símbolos y orígenes
adecuados en este momento.
3. En el menú Depurar de Visual Studio, seleccione Windows y, a continuación, haga clic en Módulos.
En la ventana Módulos, se mostrarán todos los módulos que se han cargado hasta ese momento, por ejemplo, la
aplicación administrada SayHello.exe. Observe que aún no se ha cargado el archivo HelloCOMObject.dll nativo porque
todavía no ha hecho clic en el botón de la aplicación.
Asociar con el depurador nativo
El paso siguiente es desasociar el depurador administrado para poder asociar el depurador nativo. Recuerde que en los
proyectos de dispositivo no es posible asociar ambos depuradores al mismo tiempo. Éstos son los pasos que debe seguir cada
vez que necesite cambiar del depurador administrado al depurador nativo.
Para asociar el depurador nativo
1. En el menú Depurar de Visual Studio, haga clic en Desasociar todo.
Este paso desasocia el depurador administrado, pero permite seguir ejecutando la aplicación.
2. En el menú Depurar, haga clic en Asociar al proceso.
3. En el cuadro Transporte, seleccione Smart Device.
4. Para rellenar el cuadro Calificador, haga clic en Examinar.
5. En el cuadro de diálogo Conectar con dispositivo, seleccione Pocket PC 2003 SE - Emulador y, a continuación, haga
clic en Conectar.
6. Para rellenar el cuadro Asociar a, haga clic en Seleccionar.
7. En el cuadro de diálogo Seleccionar tipo de código, seleccione Depurar estos tipos de código, desactive la casilla de
verificación Administrado, active la casilla Nativo y, a continuación, haga clic en Aceptar.
8. En el cuadro Procesos disponibles, seleccione SayHello.exe y, a continuación, haga clic en Asociar.
Ahora está asociado al depurador nativo.
Ejecutar el punto de interrupción nativo
Ya está listo para avanzar hasta el punto de interrupción que estableció en el código nativo. Cuando vuelva a ver la ventana
Módulos, podrá comprobar que ahora los módulos nativos están presentes. No obstante, el archivo Hellocomobject.dll
todavía no está cargado porque aún no ha hecho clic en button1.
Nota
Si ha ejecutado este tutorial anteriormente, puede que ya se hayan cargado los símbolos de depuración y puede omitir esos
pasos. Si no, en la sección siguiente se describen los pasos para cargarlos.

Avanzar la ejecución hasta el punto de interrupción nativo


1. En el formulario del emulador de dispositivo, haga clic en button1.
El mensaje Hola a todos aparecerá en el formulario y hellocomobject.dll aparecerá en la ventana Módulos.
Si en la columna Estado del símbolo de hellocomobject.dll se muestra No se cargaron símbolos, siga estos pasos:
a. Haga clic con el botón secundario en hellocomobject.dll y, a continuación, en el menú contextual, haga clic en
Cargar símbolos.
b. En el cuadro de diálogo Buscar símbolos, desplácese a InteropSolution\HelloCOMObject\Pocket PC 2003
(ARMV4)\Debug\HelloCOMObject.pdb.
c. Haga clic en Abrir.
La columna Estado del símbolo cambiará de No se cargaron símbolos a Símbolos cargados, y el indicador de
punto de interrupción lo mostrará como resuelto.
2. En el formulario del emulador de dispositivo, haga clic en Aceptar en la ventana Hola a todos y, a continuación, vuelva
a hacer clic en button1.
El indicador del punto de interrupción mostrará que la ejecución se ha detenido en el punto de interrupción.
3. En el menú Depurar, haga clic en Paso a paso por instrucciones o presione F11.
Observe que la ejecución se desplaza a la línea siguiente. Esto indica que ahora puede recorrer la parte nativa de la
solución.
Asociar con el depurador administrado
El paso siguiente es desasociar el depurador nativo para poder asociar el depurador administrado. Recuerde que en los
proyectos de dispositivo no es posible asociar ambos depuradores al mismo tiempo. Éstos son los pasos que debe seguir cada
vez que necesite cambiar del depurador nativo al depurador administrado.
Para asociar el depurador administrado
1. En el menú Depurar de Visual Studio, haga clic en Desasociar todo.
Este paso desasocia el depurador nativo, pero la aplicación continúa ejecutándose.
2. En el menú Depurar, haga clic en Asociar al proceso y asegúrese de que el cuadro Transporte contiene Smart Device.
3. Rellene el cuadro Calificador haciendo clic en Seleccionar, seleccionando a continuación Pocket PC 2003 SE -
Emulador y haciendo clic en Conectar.
4. Para rellenar el cuadro Asociar a, haga clic en Seleccionar y seleccione Depurar estos tipos de código; a
continuación, active la casilla Administrado, desactive la casilla Nativo y haga clic en Aceptar.
Si aparece un mensaje recordándole que la depuración nativa y la administrada no son compatibles, haga clic en
Aceptar.
5. En el cuadro Procesos disponibles, seleccione SayHello.exe y, a continuación, haga clic en Asociar.
Ya está asociado el depurador administrado.
Establecer un punto de interrupción en el código administrado
El paso siguiente es establecer un punto de interrupción en el código administrado para preparar la asociación del depurador
administrado.
Establecer un punto de interrupción en el código administrado
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.cs y, a continuación, haga clic
en Ver código en el menú contextual.
2. Cree un punto de interrupción en la línea string text;.

Ejecutar hasta el punto de interrupción administrado


Ya está listo para avanzar hasta el punto de interrupción que estableció en el código administrado.
Avanzar la ejecución hasta el punto de interrupción administrado
En el emulador de dispositivo, haga clic en button1.
La ejecución se detiene en el punto de interrupción.
Conclusión
Para mejorar el rendimiento, no olvide restablecer la clave del Registro del dispositivo en 0 cuando ya no necesite asociar el
depurador administrado a un proceso en ejecución.
Vea también
Tareas
Cómo: Conectar a procesos de dispositivos administrados
Cómo: Cambiar la configuración del Registro en un dispositivo
Otros recursos
Depurar proyectos de dispositivos
Depurar en Visual Studio
Desarrollo para Smart Device

Empaquetar soluciones de dispositivos para su implementación


Para distribuir aplicaciones de dispositivos entre usuarios finales, es necesario crear un archivo CAB.
En esta sección
Información general sobre el empaquetado de soluciones para dispositivos
Describe los procesos necesarios para empaquetar una aplicación de dispositivo inteligente para su distribución entre
usuarios finales.
Características de IDE compatibles con el empaquetado de aplicaciones para dispositivos
Describe los elementos de entorno Visual Studio que se utilizan para empaquetar, así como las diferencias de empaquetado
según las plataformas de destino.
Tutorial: Empaquetar una solución Smart Device para su implementación
Proporciona instrucciones paso a paso para empaquetar una aplicación y sus recursos.
Secciones relacionadas
Desarrollo de dispositivos inteligentes
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Información general sobre el empaquetado de soluciones para


dispositivos
Se conoce como implementación el proceso mediante el cual se transfiere una aplicación o componente al dispositivo o
dispositivos de destino donde se pretende que se ejecuten. Antes de poder implementar una solución determinada, hay que
empaquetarla en un archivo CAB. Un archivo CAB es un tipo de archivo de almacenamiento ejecutable que puede contener una
determinada aplicación, dependencias como archivos DLL, recursos, archivos de ayuda y cualquier otro tipo de archivo que se
desea incluir. Al generar un proyecto CAB, Microsoft Visual Studio 2005 genera un archivo INF que se utiliza, a su vez, para
crear el archivo CAB. El archivo INF describe las carpetas en las que se va a instalar cada archivo, las versiones de Windows CE
en las que se desea ejecutar la aplicación, si se permite desinstalar la aplicación, etcétera. También es posible incluir en el
archivo CAB un archivo DLL nativo personalizado para realizar cualquier paso de la instalación personalizada como la
comprobación del número de versión de Windows CE o .NET Compact Framework, determinando si hay otros componentes
presentes, etcétera. Tras copiar el archivo CAB en el dispositivo de destino, el usuario hace clic en él para comenzar el proceso
de instalación. Esto se conoce como explotar el archivo CAB.
Nota
Microsoft Visual Studio 2005 proporciona herramientas para empaquetar el archivo CAB en cuestión. No proporciona ningu
na herramienta para la implementación del archivo CAB en un dispositivo de destino. En el caso de escenarios simples, es po
sible arrastrar un archivo CAB desde el escritorio al dispositivo utilizando una conexión ActiveSync. Existen varias soluciones
de implementación de otros fabricantes que se encuentran disponibles para escenarios más complejos. Para obtener más inf
ormación, visite Mobile and Embedded Application Developer Center.

Visual Studio 2005 hace posible, en la mayoría de los casos, la realización de todo el trabajo de empaquetado necesario
directamente en el entorno de desarrollo integrado (IDE) de Visual Studio. Es posible crear un archivo CAB, primero, agregando
un proyecto CAB para Smart Device a la solución existente, a continuación, agregando archivos, accesos directos y entradas de
Registro con la misma interfaz de usuario utilizada con proyectos de instalación de escritorio. Al generar el proyecto de
instalación, se crea el archivo CAB.
Hay algunas diferencias entre los archivos CAB files creados para una aplicación Pocket PC y aquellos otros creados para una
aplicación Smartphone. Los archivos Pocket PC basados en Windows Mobile 2003SE o versiones anteriores no admiten
archivos CAB comprimidos o archivos CAB firmados. Los archivos CAB de Smartphone deben comprimirse y tanto el archivo
EXE como el archivo DLL, y el propio archivo CAB, deben firmarse digitalmente antes de poder ser instalados en el dispositivo.
Una vez que creado el archivo CAB con Visual Studio, el siguiente paso consiste en transferirlo al dispositivo de destino
utilizando cualquiera de los medios habituales para transferir archivos: solicitudes FTP o HTTP desde el dispositivo, copia
manual desde el equipo de desarrollo de escritorio en una carpeta de un dispositivo conectado utilizando Windows Explorer,
transferencia OTA para Smartphones, etcétera.
Vea también
Tareas
Tutorial: Empaquetar una solución Smart Device para su implementación
Conceptos
Características de IDE compatibles con el empaquetado de aplicaciones para dispositivos
Otros recursos
Desarrollo de dispositivos inteligentes
Administración de la instalación de archivos en la implementación
Desarrollo para Smart Device

Características de IDE compatibles con el empaquetado de


aplicaciones para dispositivos
Para empaquetar una solución para su implementación en Smart Devices, hay que utilizar características de entorno de
desarrollo integrado (IDE) iguales o parecidas a Microsoft Visual Studio 2005 que se utilizan para soluciones de escritorio.
Estas propiedades aparecen descritas en la tabla siguiente.
Caracter Cómo buscar Comentarios
ística
Plantilla En el menú Archivo, señale Agregar, Haga clic en este icono para agregar un nuevo proyecto CAB a la solución exi
para pro haga clic en Nuevo proyecto, haga cl stente. Observe que éste es el único tipo de proyecto en este cuadro de diálo
yecto CA ic en Otros tipos de proyectos y, a c go que es válido para Smart Devices. Tras seleccionar un nombre para el pro
B de Sm ontinuación, haga clic en Instalación yecto CAB y hacer clic en Aceptar, el proyecto quedará agregado a la solució
art Devic e implementación. n y aparecerá en el Explorador de soluciones.
e

Editor de Haga clic con el botón secundario del Utilice este editor para especificar los archivos que se van a agregar al proyec
l sistema mouse en el nombre de proyecto CAB to CAB y las carpetas de dispositivos donde se deberían instalar.
de archiv del Explorador de soluciones, haga
os clic en Ver y, a continuación, haga clic
en Sistema de archivos.

Editor de Haga clic con el botón secundario del Utilice este editor para especificar cualquier clave de Registro especial requeri
l Registr mouse en el nombre de proyecto CAB da por su aplicación.
o del Explorador de soluciones, haga
clic en Ver y, a continuación, haga clic
en Registro.

Ventana Seleccione el proyecto CAB en el Expl Utilice esta ventana para especificar el nombre, si es que existe alguno, para e
Propieda orador de soluciones y, a continuaci l archivo DLL de instalación CE, el nombre del fabricante de la aplicación y las
des para ón, haga clic en Ventana Propiedade versiones más antiguas y más recientes de Windows CE que la aplicación en
el proyec s en el menú Ver. cuestión puede ejecutar (atendiendo a su diseño), así como otras opciones.
to CAB

Páginas Haga clic con el botón secundario del Utilice este cuadro de diálogo para especificar la configuración (por ejemplo,
de propi mouse en el nombre de proyecto CAB Debug), nombre del archivo de resultados y certificados de seguridad.
edades d del Explorador de soluciones y, a co
el proyec ntinuación, haga clic en Propiedades.
to
Nota
Dado que estos mismos editores se utilizan para los proyectos de instalación de escritorio, puede que algunas opciones se e
ncuentren deshabilitadas para proyectos CAB de Smart Devices.

En algunos casos, puede que se cree una aplicación que sólo esté diseñada para ejecutarse en unas determinadas plataformas,
como Windows Mobile 2003 SE y posteriores. En esos casos, se puede evitar que el archivo CAB se instale en las plataformas
no compatibles que se especifiquen, pero para ello es necesario editar manualmente el archivo INF y, a continuación, volver a
empaquetar el proyecto CAB utilizando herramientas de la línea de comandos. Si se vuelve a empaquetar el proyecto CAB
utilizando Visual Studio, se sobrescribirán los cambios.
Pocket PC y Smartphone
En Windows Mobile 2003 SE y versiones anteriores, la principal diferencia entre archivos CAB para Pocket PC y archivos para
Smartphones radica en que Pocket PC no admite archivos CAB comprimidos o con firma. Los archivos CAB para Smartphone
se deben comprimir y tanto el archivo .exe como el archivo .dll y el propio archivo CAB deben firmarse de forma digital antes
de poderse instalar en el dispositivo. Para obtener más información, vea Seguridad en los proyectos de dispositivos.
Aplicaciones nativas y administradas
La única diferencia entre crear un proyecto CAB de Smart Device para una aplicación escrita en C++ y otra escrita en Visual C#
o Visual Basic es que, con aplicaciones nativas, el usuario debe agregar manualmente las dependencias del sistema, atl80.dll,
mfc80U[d].dll y/o msvcrt[d].dll, al proyecto CAB en cuestión. En el caso de aplicaciones administradas, nunca se deberá
agregar ningún archivo DLL .NET Compact Framework al archivo CAB que se determine. Si se establece como destino la
versión 1.0; a continuación, todos los archivos DLL ya estarán presentes en cualquier dispositivo basado en Windows Mobile
2003SE y versiones posteriores. Si la versión de destino es la versión 2.0 de .NET Compact Framework, será necesario
determinar si el dispositivo ya tiene instalada esa versión. Esto se puede llevar a cabo, creando un archivo DLL de instalación
de Windows CE que comprueba la versión de mscoree.dll en el dispositivo de destino. Si la versión 2.0 del archivo .NET
Compact Framework no está presente, se podrá implementar el proyecto CAB adecuado que se proporciona con Visual Studio
en la siguiente ruta de acceso: Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\WindowsCE. O puede
implementar por separado este proyecto CAB con respecto a su aplicación CAB o incrustarlo en la propia aplicación CAB.
Precaución
Al redistribuir una aplicación nativa vinculada dinámicamente a MFC/ATL e implementar las DLL en tiempo de ejecución de
MFC/ATL en el directorio de la aplicación, es probable que la aplicación no tenga ningún vínculo con las DLL de ese directori
o. En Windows CE, si dos DLL tienen el mimo nombre de archivo pero diferentes rutas de acceso, sólo se cargará la primera
DLL con el nombre de archivo en cuestión. No se cargarán las DLL subsiguientes con el mismo nombre de archivo. En su lug
ar, la aplicación estará vinculada a la DLL con ese nombre de archivo previamente cargada mediante otra aplicación.
Para asegurarse de que la aplicación está vinculada con las DLL de ese directorio, hay que asegurarse de que ninguna otra ap
licación está utilizando ninguna DLL con los mismos nombres de archivo.

Smart Device e Implementación de escritorio


Es posible obtener acceso tanto a proyectos de escritorio como a proyectos de configuración de dispositivos en el cuadro de
diálogo Nuevo proyecto, haciendo clic en Otros tipos de proyectos y, a continuación, en Instalación e implementación. Al
implementar una aplicación de escritorio, se puede elegir entre Proyecto de instalación, Proyecto de módulo de combinación,
Proyecto CAB, Proyecto de programa de instalación Web y Asistente para proyectos de instalación. Ninguno de estos tipos de
proyecto se puede utilizar para aplicaciones de dispositivos. Smart Devices no admite la implementación ClickOnce. Para crear
un archivo CAB cuya finalidad es su posterior implementación en cualquier dispositivo basado en Windows CE, incluidos
Smartphone y Pocket PC, hay que utilizar el proyecto CAB de Smart Device.
Vea también
Tareas
Tutorial: Empaquetar una solución Smart Device para su implementación
Conceptos
Información general sobre el empaquetado de soluciones para dispositivos
Desarrollo para Smart Device

Tutorial: Empaquetar una solución Smart Device para su


implementación
Este tutorial muestra cómo utilizar Visual Studio 2005 para empaquetar una aplicación determinada y sus recursos en un
archivo CAB, de modo que se pueda implementar en un dispositivo inteligente de usuario final.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar su configuración, elija Importar y exportar configuraciones en el me
nú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

En este tutorial, se comienza por cualquier solución de dispositivo inteligente escrita en Visual Basic 2005, Visual C# 2005 o
Visual C++ 2005. Para obtener más información, vea Tutorial: Crear una aplicación simple.
Este tutorial muestra cómo hacer lo siguiente:
Agregar un proyecto Cab a la solución.
Cambiar el nombre de producto.
Cambiar la ruta de acceso de resultados.
Rellenar el archivo CAB con el resultado primario de la aplicación.
Agregar dependencias si es necesario.
Crear un acceso directo a la aplicación.
Editar una entrada del Registro.
Requisitos previos
Solución Smart Device existente. Entre los fines de este tutorial sobre el empaquetado, hay que tener en cuenta la creación y la
generación de un proyecto sencillo, como el proyecto descrito en Tutorial: Crear aplicaciones de Windows Forms para un
dispositivo.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Establecer el proyecto Cab


Para agregar un proyecto Cab de Smart Device a la solución
1. Abra el proyecto de Smart Device existente y asegúrese de que el Explorador de soluciones se encuentra visible.
2. En el menú Archivo, elija Agregar y, después, haga clic en Nuevo proyecto.
Aparecerá el cuadro de diálogo Agregar nuevo proyecto.
3. En el panel Tipos de proyecto que aparece en la izquierda, expanda el nodo Otros tipos de proyectos y, a
continuación, haga clic en Instalación e implementación.
4. En el panel Plantillas que aparece a la derecha, seleccione Proyecto CAB de Smart Device.
Éste es el único tipo de proyecto Cab válido para dispositivos inteligentes. Los otros tipos de proyecto son sólo para
soluciones de escritorio.
5. En el cuadro Nombre, escriba CABProject y, a continuación, haga clic en Aceptar.
El proyecto Cab se agrega a la solución pertinente y se encuentra visible en el Explorador de soluciones. Ahora
aparecen los dos paneles del Editor del sistema de archivos.
Personalizar el proyecto Cab
Para cambiar el nombre del producto y otras propiedades del proyecto
1. En el Explorador de soluciones, seleccione CABProject si todavía no se encuentra seleccionado.
2. En el menú Ver, haga clic en Ventana Propiedades para abrir la ventana Propiedades.
3. En el campo ProductName de la cuadrícula de propiedad, cambie el valor a MyProduct.
El valor de la propiedad ProductName determina el nombre que se mostrará para la aplicación en los nombres de
carpeta y en el cuadro de diálogo Agregar o quitar programas.
También es posible utilizar esta ventana para cambiar el nombre del fabricante y especificar las versiones mínima y
máxima del sistema operativo.
Es posible establecer la propiedad OSVersionMin en 4.21 para indicar que la aplicación para Pocket PC tiene
conocimiento sobre la orientación de pantalla. Sin embargo, estableciendo esta propiedad en 4.21 se evitará que la
aplicación se instale en Pocket PC basada en Windows Mobile 2003 y anterior. Para permitir que se realice la
instalación en tales dispositivos y, a la vez, indicar el conocimiento sobre la orientación de la pantalla hacia los
dispositivos más actuales, es necesario editar de forma manual el archivo .inf con el fin de establecer la propiedad
BuildMax en uno de los siguientes valores:
0xA0000000 para indicar que la aplicación admite pantallas cuadradas (240x240 píxeles)
0xC0000000 para indicar que la aplicación admite la rotación de pantallas
O bien
0xE0000000 para indicar que la aplicación admite pantallas cuadradas y la rotación de pantallas.
Para obtener más información, vea el informe de MSDN Developing Screen Orientation-Aware Applications.
Para soluciones Pocket PC basadas en Windows Mobile 2003SE y anteriores, las propiedades Compress y
NoUninstall Device Deployment deben ser falsas. Hay que tener en cuenta que esta opción se puede establecer
en true para dispositivos equipados con Compact Framework 2.0. Para obtener más información, vea Propiedades
(Ventana), Proyecto Cab de Smart Device.
Si se está utilizando una DLL de instalación de Windows CE, utilice esta cuadrícula de propiedad para especificar el
nombre de archivo y la ubicación. Para obtener más información sobre las DLL de instalación de Windows CE,
consulte la documentación relacionada con Pocket PC o Smartphone SDK.

Para cambiar el nombre del archivo CAB y agregar autenticación


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en CABProject y, a continuación, en
Propiedades.
Aparecerá el cuadro de diálogo Páginas de propiedades del proyecto Cab pertinente. En el cuadro Nombre del
archivo de resultados, cambie el nombre del archivo CAB y la ruta de acceso a Debug\MyApp.cab y, a continuación,
haga clic en Aceptar.
2. También es posible utilizar esta página de propiedades para agregar autenticación al proyecto en cuestión. Es necesaria
la autenticación para soluciones Smartphone y no se admite en soluciones Pocket PC basadas en Windows Mobile 2003
SE y anteriores. Para obtener más información, vea Seguridad en los proyectos de dispositivos.
Para agregar la aplicación del proyecto de dispositivos al proyecto Cab
1. En el panel que se encuentra a la izquierda del Editor del sistema de archivos, seleccione el nodo Carpeta de la
aplicación con el fin de especificar que los archivos que se seleccionen en los siguientes pasos se instalarán en la
carpeta del dispositivo de destino.
Si el editor del Sistema de archivos no se encuentra visible, haga clic con el botón secundario del mouse en el nombre
del proyecto Cab del Explorador de soluciones, seleccione Ver y haga clic en Sistema de archivos.
2. En el menú Acción de Visual Studio, elija Agregar y, a continuación, haga clic en Resultados del proyecto.
3. En el cuadro de diálogo Agregar grupo de resultados del proyecto, seleccione el proyecto de Smart Device
correspondiente de la lista desplegable Proyecto.
4. En la lista de resultados, seleccione Resultado principal y, a continuación, haga clic en Aceptar.
Nota
A la hora de crear un proyecto Cab de Smart Device para una aplicación diseñada en C++, es necesario agregar de forma ma
nual cualquier dependencia, como atl80.dll, mfc80U.dll o msvcr.dll, al proyecto Cab en cuestión si se están estableciendo vínc
ulos de forma dinámica a las DLL especificadas. Se recomienda el establecimiento de vínculos estáticos para reducir las depe
ndencias en los archivos DLL de MFC/ATL. Si se están estableciendo vínculos de forma estática, los archivos DLL no se deberí
an redistribuir con la aplicación en cuestión. Si se están estableciendo vínculos de forma dinámica y resulta necesario redistri
buir los archivos DLL del proyecto Cab, no instale los archivos DLL en el directorio del sistema (como \windows) en el disposi
tivo. En su lugar, instale los archivos DLL en el directorio local de la aplicación. Si se está redistribuyendo un conjunto de aplic
aciones y todas están vinculadas de forma dinámica a los tiempos de ejecución de ATL/MFC, se recomienda instalar todas las
aplicaciones junto con los archivos DLL en tiempo de ejecución en un solo directorio de aplicaciones y proporcionar accesos
directos a las aplicaciones en cuestión que se pueden colocar en sus propias carpetas. Esto ayudará a ahorrar algo de espacio
y evitará que exista algún tipo de peligro con respecto a que los archivos DLL del directorio del sistema sean reemplazados p
osteriormente y pueda dañarse cualquier aplicación que esté vinculada de forma dinámica a ellos.

Para agregar dependencias al proyecto Cab (sólo proyectos de C++)


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del proyecto Cab y, a
continuación, elija Agregar y haga clic en Archivo.
2. Desplácese a la <carpeta de instalación de Visual Studio>\VC\ce\dll\<plataforma>.
3. Seleccione los archivos que desee agregar.
En el caso de un proyecto MFC, presione CTRL y haga clic en MFC80U.DLL, atl80.dll y msvcr80.dll. Puede que
también sea necesario hacer clic en uno o más de los archivos DLL específicos del lenguaje si la aplicación
pertinente requiere recursos concretos para el lenguaje de MFC.
Para un proyecto ATL, presione CTRL y haga clic en atl80.dll y msvcr80.dll. Si la solución ATL admite MFC, también
haga clic en MFC80U.DLL.
Para un proyecto Win32, haga clic en msvcr80.dll.
4. Haga clic en Abrir en el cuadro de diálogo Agregar archivos para agregar los archivos al proyecto Cab.
5. En el panel izquierdo del Editor del sistema de archivos, haga clic con el botón secundario del mouse en Sistema de
archivos en Equipo de destino.
6. Haga clic en Agregar carpeta especial y, a continuación, haga clic en Carpeta Windows.
7. En el panel izquierdo de Editor del sistema de archivos, haga clic en la carpeta que contiene el resultado principal. Los
archivos DLL se han agregado de manera predeterminada a la misma carpeta como su resultado principal. Para
moverlos a la carpeta de Windows, seleccione los archivos en el panel central del Editor del sistema de archivos y
arrástrelos hasta el icono Carpeta Windows.
8. Utilice el mismo procedimiento para agregar cualquier otra dependencia necesaria para la solución en cuestión. Es
posible agregar dependencias a cualquier carpeta; no es necesario para agregarlas a la carpeta Windows.

Para crear un acceso directo para la aplicación del proyecto de dispositivos


1. En el panel derecho del Editor del sistema de archivos, seleccione Resultado principal desde <nombre del
proyecto de la aplicación>.
2. En el menú Acción, seleccione Crear acceso directo al resultado primario a partir del <nombre del proyecto de la
aplicación>.
Este comando agrega un elemento Acceso directo debajo del elemento Resultados.
3. Haga clic con el botón secundario del mouse en el elemento Acceso directo, haga clic en Cambiar nombre y cambie el
nombre del acceso directo a algún nombre más apropiado para un acceso directo.

Para agregar una entrada de Registro


1. En el Explorador de soluciones, seleccione el proyecto Cab.
2. En el menú Ver, elija Editor y, a continuación, haga clic en Registro.
3. En el Editor del Registro, haga clic con el botón secundario del mouse en HKEY_CURRENT_USER y, a continuación, haga
clic en Nueva clave en el menú contextual.
4. Cuando aparezca la entrada Nueva clave en el Editor del Registro, cámbiele el nombre a SOFTWARE.
5. Haga clic con el botón secundario del mouse en esta nueva clave, señale Nueva y, a continuación, haga clic en Clave.
6. Cuando aparezca la entrada Nueva clave en el Editor del Registro, cámbiele el nombre a MyCompany.
7. Haga clic con el botón secundario del mouse en la entrada MyCompany y, a continuación, haga clic en Ventana
Propiedades del menú contextual.
El valor Name ha cambiado a MyCompany.
Generar e implementar el archivo CAB
Para generar el archivo CAB
1. En el menú Generar, haga clic en Generar CABProject.
O bien
Haga clic con el botón secundario del mouse en CABProject en el Explorador de soluciones y, a continuación, haga
clic en Generar.
2. En el menú Archivo, haga clic en Guardar todo.
Los archivos CAB para soluciones Smartphone deben estar firmados digitalmente antes de implementarse en un
dispositivo de usuario final. La firma digital no se admite en soluciones Pocket PC basadas en Windows Mobile 2003SE y
anteriores. Para obtener más información, vea Cómo: Firmar un archivo CAB (Dispositivos).

Para implementar el archivo CAB en el dispositivo


1. En el Explorador de Windows, desplácese a la carpeta donde se encuentra almacenada esta solución. Encontrará el
archivo CAB en la carpeta CABProject\Release de la solución.
2. Copie el archivo CAB en un dispositivo que se encuentre conectado a ActiveSync 4.0 o posterior.
Cuando un usuario determinado puntee sobre el nombre del archivo CAB en el Explorador de archivos del dispositivo,
Windows CE hará explotar el CAB y procederá a la instalación de la aplicación en el dispositivo.
Para obtener más información, consulte la documentación del SDK de Smartphone o Pocket PC.
Vea también
Otros recursos
Tutoriales sobre dispositivos inteligentes
Empaquetar soluciones de dispositivos para su implementación
Desarrollo para Smart Device

Seguridad en los proyectos de dispositivos


Los dispositivos restringen la instalación y ejecución de aplicaciones y el acceso a los recursos del sistema en función de la
configuración de la directiva de seguridad y las funciones de seguridad. En esta sección se incluyen temas que explican cómo
preparar la aplicación para ejecutarla en dispositivos con modelos de seguridad diferentes.
En esta sección
Información general sobre seguridad (Dispositivos)
Describe los certificados, los modelos de seguridad, el suministro y otra información del general.
Diagrama gráfico del proceso de firma para dispositivos
Muestra gráficamente cómo funcionan las firmas en los proyectos de dispositivos.
Cómo: Importar y aplicar certificados en proyectos de dispositivos
Describe cómo utilizar el entorno Visual Studio para ubicar y aplicar certificados.
Cómo: Firmar una aplicación de Visual Basic o Visual C# (Dispositivos)
Describe cómo utilizar el entorno Visual Studio para aplicar los certificados a archivos EXE y DLL en proyectos que usan .NET
Compact Framework.
Cómo: Firmar un ensamblado de Visual Basic o Visual C# (Dispositivos)
Describe cómo utilizar el entorno Visual Studio para aplicar certificados a proyectos escritos tomando como referencia .NET
Compact Framework.
Cómo: Firmar los resultados del proyecto en un proyecto de Visual C++ (Dispositivos)
Describe cómo utilizar el entorno del Visual Studio para aplicar los certificados al resultado del proyecto en proyectos de
Visual C++.
Cómo: Firmar un archivo CAB (Dispositivos)
Describe cómo utilizar el entorno del Visual Studio para aplicar los certificados a proyectos CAB de Smart Device.
Cómo: Poner en servicio un dispositivo en un proyecto de Visual Basic o Visual C#
Describe cómo utilizar el entorno del Visual Studio para agregar certificados a almacenes de certificados que utilizan .NET
Compact Framework.
Cómo: Poner en servicio un dispositivo en un proyecto de Visual C++
Describe cómo utilizar el entorno Visual Studio para agregar certificados a almacenes de certificados de proyectos escritos
en Visual C++.
Cómo: Poner en servicio un dispositivo con un modelo de seguridad
Describe cómo establecer el modelo de seguridad de un dispositivo.
Cómo: Consultar un dispositivo para conocer su modelo de seguridad
Describe cómo descubrir los certificados que están instalados en un dispositivo.
Cómo: Iniciar Signtool.exe como evento posterior a la generación (Dispositivos)
Describe cómo aplicar certificados después de que un evento posterior a la generación cambie los binarios originales.
Referencia
Seguridad (Guía de programación de C#)
Seguridad y desarrollo en Visual Basic
Procedimientos recomendados para la seguridad en C++
Seguridad en .NET Compact Framework
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Información general sobre seguridad (Dispositivos)


Los dispositivos restringen la instalación y ejecución de aplicaciones y el acceso a los recursos del sistema en función de la
configuración de la directiva de seguridad y las funciones de seguridad. Para que las aplicaciones funcionen correctamente en
ciertos dispositivos, se deben firmar con el certificado apropiado, y el certificado debe estar presente en el almacén de
certificados del dispositivo.
¿Qué archivos se deben firmar?
El procedimiento recomendado requiere que se firmen los archivos EXE, DLL, CAB y MUI (Interfaz User Multilingual, Interfaz de
usuario multilingüe). En proyectos administrados, también se deben firmar los archivos de ensamblado.
Modelos de seguridad
Asimismo, un dispositivo se puede configurar para funcionar con varios modelos de seguridad. Los distintos modelos de
seguridad pueden restringir el acceso a aplicaciones que no tienen la autorización apropiada. Para obtener más información
sobre modelos de seguridad de dispositivos, vea Guía del desarrollador de Smartphone basado en Windows Mobile y Cómo:
Poner en servicio un dispositivo con un modelo de seguridad.
Firmar después de modificar el archivo binario posterior a la generación
Si ejecuta un paso posterior a la generación que altera un archivo binario, necesita volver a firmar el archivo binario; es decir,
debe deshabilitar Firmar con Authenticode en las propiedades del proyecto y firmar en su lugar como un paso posterior a la
generación. Esta acción es necesaria porque toda modificación del archivo binario posterior a la firma invalida la firma. Por
tanto, es necesario volver a firmar el archivo binario.
Puesta en servicio
Poner en servicio un dispositivo significa agregar certificados digitales a los almacenes de certificados del dispositivo. Cuando
se intenta instalar o ejecutar una aplicación en el dispositivo, el sistema operativo del dispositivo comprueba si el certificado
con el que la aplicación está firmada está en un almacén de certificados en el dispositivo. Para obtener más información sobre
los almacenes de certificados, vea A Practical Guide to the Smartphone Application Security and Code Signing Model for
Developers (Guía práctica del modelo de seguridad y firma de código para aplicaciones Smartphone para desarrolladores).
Los operadores de móviles realizan la puesta en servicio previa de los dispositivos Smartphone.
Los Pocket PC basados en Windows Mobile 5.0 se suministran previamente mediante OEM mientras que en el pasado
normalmente no era así.
Se realiza la puesta en servicio previa de las imágenes pera el emulador de dispositivos en Visual Studio.
Para obtener más información sobre la puesta en servicio, consulte la documentación del SDK de Smartphone o Pocket PC.
Archivo de certificados
Para facilitar el desarrollo de aplicaciones para una variedad de modelos de seguridad, Visual Studio 2005 incluye los archivos
de certificados siguientes, ubicados de manera predeterminada en \Archivos de programa\Microsoft Visual Studio
8\SmartDevices\SDK\SDKTools\TestCertificates:
TestCert_Privileged.pfx
TestCert_UnPrivileged.pfx
Estos archivos .pfx contienen el certificado y la clave privada correspondiente. (Si intenta firmar una aplicación con un
certificado que carece de una clave privada correspondiente, se producirán errores.) No tienen ninguna contraseña.
Importe los archivos .pfx al almacén de certificados personales en el equipo de escritorio. Si intenta importarlos a otro almacén
(como el almacén de autoridades emisoras de certificados raíz en las que se confía), Visual Studio muestra una advertencia de
seguridad detallada. Para obtener más información, vea Cómo: Importar y aplicar certificados en proyectos de dispositivos.
Vea también
Tareas
Cómo: Poner en servicio un dispositivo en un proyecto de Visual C++
Cómo: Poner en servicio un dispositivo en un proyecto de Visual Basic o Visual C#
Conceptos
Proteger cadenas de conexión
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Diagrama gráfico del proceso de firma para dispositivos


La representación gráfica siguiente muestra la relación existente entre las distintas partes del proceso de firma.
El primer paso para firmar el proyecto es seleccionar un certificado. El certificado puede estar ubicado en su almacén de
certificados, y también puede importar nuevos certificados y seleccionarlos.
Después de haber seleccionado el certificado, debe decidir si desea utilizarlo para poner el dispositivo en servicio. Si pone en
servicio el dispositivo, debe seleccionar qué almacén de certificados del dispositivo (el almacén con privilegios o el almacén sin
privilegios) recibirá el certificado.
Cada vez que genera, el proyecto se firma con el certificado seleccionado. Cada vez que implementa (por ejemplo, F5), el
dispositivo se pone en servicio con el certificado seleccionado, que está ubicado en el almacén de certificados seleccionado en
el dispositivo.
En el IDE Visual Studio, las opciones de firma se establecen generalmente en una de las páginas de propiedades del proyecto.
Si no quiere firmar el proyecto con Authenticode, el diagrama de flujo no se aplica a su proyecto.
Diagrama de flujo

Vea también
Tareas
Cómo: Firmar una aplicación de Visual Basic o Visual C# (Dispositivos)
Cómo: Firmar un ensamblado de Visual Basic o Visual C# (Dispositivos)
Cómo: Firmar los resultados del proyecto en un proyecto de Visual C++ (Dispositivos)
Cómo: Firmar un archivo CAB (Dispositivos)
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Importar y aplicar certificados en proyectos de


dispositivos
El cuadro de diálogo Seleccionar certificado es el portal central para firmar los proyectos de dispositivos. Proporciona una
entrada al cuadro de diálogo Administrar certificados y al Asistente para importación de certificados, tal y como se
describe en los siguientes pasos.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Mostrar el cuadro de diálogo Seleccionar certificado


La forma de obtener acceso al cuadro de diálogo Seleccionar certificado depende del tipo de proyecto que desea firmar.
Para mostrar el cuadro de diálogo Seleccionar certificado
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en <Nombre de proyecto> y, a
continuación, haga clic en Propiedades en el menú contextual.
2. Continúe con uno de los procedimientos siguientes:
Para proyectos de Visual Basic y Visual C#: en el Diseñador de proyectos, haga clic en Dispositivos, seleccione
Firma Authenticode y, a continuación, haga clic en Seleccionar certificado.
En proyectos de Visual C++, seleccione Firmar con Authenticode y, a continuación, haga clic en el botón de
puntos suspensivos en la fila de la propiedad Certificado.
En proyectos CAB para Smart Device, seleccione Firmar con Authenticode y, a continuación, haga clic en
Seleccionar del almacén.
Seleccionar un certificado para un proyecto de dispositivo
Tras mostrar el cuadro de diálogo Seleccionar certificado como se describe en los pasos anteriores, puede seleccionar el
certificado que desee.
Para seleccionar un certificado para el proyecto mediante el cuadro de diálogo Seleccionar certificado
Si el cuadro de diálogo Seleccionar certificado aparece el certificado deseado para el proyecto, seleccione el certificado
y haga clic en Aceptar.
El proyecto se firma con ese certificado cuando se genera el proyecto.
Si el cuadro de diálogo Seleccionar certificado no muestra el certificado que desea para el proyecto, puede importar
un certificado mediante el Asistente para importación de certificados.
Seleccionar un certificado para un proyecto de dispositivo
En los pasos siguientes se muestra cómo rellenar el cuadro de diálogo Seleccionar certificado importando los certificados de
prueba que proporciona Visual Studio y aplicándolos a un proyecto. Puede seguir este mismo procedimiento si desea aplicar
un certificado diferente.
Visual Studio proporciona tres elementos de interfaz de usuario para importar un certificado que se aplicará a un proyecto:
Cuadro de diálogo Seleccionar certificado, que especifica qué certificados se aplicarán al proyecto actual.
Cuadro de diálogo Administrar certificados, que muestra los archivos de certificado disponibles en el equipo de
desarrollo.
El Asistente para importación de certificados, que guía al usuario para seleccionar el archivo de certificado y especificar
dónde desea almacenarlo.
Para importar un certificado de prueba mediante el Asistente para importación de certificados
1. En el cuadro de diálogo Seleccionar certificado, haga clic en Administrar certificados.
El cuadro de diálogo Administrar certificados muestra una lista de certificados almacenados en el equipo de
desarrollo.
2. Haga clic en Importar para abrir el Asistente para importación de certificados.
3. Haga clic en Siguiente para abrir la página Archivo para importar del asistente.
4. Haga clic en Examinar para desplazarse a la carpeta TestCertificates en Visual Studio.
De manera predeterminada, esta carpeta se encuentra en \Archivos de programa\Microsoft Visual Studio
8\SmartDevices\SDK\SDKTools.
5. Cambie la selección de Archivos de tipo a Todos los archivos (*.*), seleccione TestCert_Privileged.pfx o
TestCert_Unprivileged.pfx y, a continuación, haga clic en Abrir.
6. En la página Archivo para importar del asistente, haga clic en Siguiente para abrir la página Contraseña.
Deje el cuadro Contraseña en blanco. Los certificados de prueba no tienen contraseña.
7. Haga clic en Siguiente para abrir la página Almacén de certificados. Hay que asegurarse de haber seleccionado
Personal en el cuadro Almacén de certificados.
8. Haga clic en Siguiente para mostrar la página final y, a continuación, haga clic en Finalizar.
Aparece el mensaje La importación se completó correctamente.
9. Haga clic en Aceptar para cancelar el mensaje.
El certificado aparece ahora en la lista Administrar certificados. Haga clic en Cerrar para volver al cuadro de diálogo
Seleccionar certificado.
10. Seleccione los certificados que desee y, después, haga clic en Aceptar.
El certificado se muestra ahora en la página de propiedades en la que se inició el procedimiento.
Vea también
Tareas
Cómo: Firmar una aplicación de Visual Basic o Visual C# (Dispositivos)
Cómo: Firmar un ensamblado de Visual Basic o Visual C# (Dispositivos)
Cómo: Firmar los resultados del proyecto en un proyecto de Visual C++ (Dispositivos)
Cómo: Firmar un archivo CAB (Dispositivos)
Conceptos
Información general sobre seguridad (Dispositivos)
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Firmar una aplicación de Visual Basic o Visual C#


(Dispositivos)
En los pasos siguientes se asume que dispone de un proyecto de Visual Basic o Visual C# para Smart Device en su solución.
Para obtener más información, vea Programación para dispositivos con .NET Compact Framework.
Estos pasos son los mismos para los proyectos EXE y DLL.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para firmar un proyecto de dispositivo de Visual Basic o Visual C#


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de Visual Basic o Visual C#
y haga clic en Propiedades en el menú contextual.
2. En la página Dispositivos, seleccione Firma Authenticode.
3. Haga clic en Seleccionar certificado.
4. En el cuadro de diálogo Seleccionar certificado:
Si el certificado que desea aparece en la lista, selecciónelo y haga clic en Aceptar para cerrar el cuadro de diálogo.
Si el certificado que desea no aparece en la lista, haga clic en Administrar certificados para abrir el cuadro de
diálogo Administrar certificados. Para obtener más información, vea Cómo: Importar y aplicar certificados en
proyectos de dispositivos.
Cuando termine de adquirir su certificado, haga clic en Aceptar en el cuadro de diálogo Seleccionar certificado.
Los detalles del certificado aparecen en la ventana Firma de aplicaciones de la página Dispositivos.

Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Firmar un ensamblado de Visual Basic o Visual C#


(Dispositivos)
En los pasos siguientes se supone que tiene un proyecto de Visual Basic o Visual C# para Smart Device en su solución. Para
obtener más información sobre la creación de estos proyectos, vea Programación para dispositivos con .NET Compact
Framework.
Estos pasos son los mismos para los proyectos EXE y DLL.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para firmar un ensamblado en un proyecto de dispositivo de Visual Basic o Visual C#


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de Visual Basic o Visual C#
y haga clic en Propiedades en el menú contextual.
2. En la página Firma, haga clic en Firmar el ensamblado.
3. En el cuadro Elija un archivo de clave de nombre completo:
Si desea utilizar un archivo de clave de nombre seguro que ya existe, haga clic en <Examinar…> para abrir el
cuadro de diálogo Seleccionar archivo.
Si desea crear un nuevo archivo de clave de nombre seguro, haga clic en Nuevo para abrir el cuadro de diálogo
Crear clave de nombre seguro.
Para retrasar la firma de un ensamblado
Una vez finalizados los pasos anteriores, haga clic en Retrasar firma sólo.
Utilice esta característica cuando no tenga acceso a una clave privada que necesite. El retraso de la firma proporciona la
clave pública y difiere la incorporación de la clave pública hasta agregando la clave privada hasta la entrega del
ensamblado. Para obtener más información, vea Cómo: Retrasar la firma de un ensamblado (Visual Studio).
Vea también
Conceptos
Firma de nombre seguro para aplicaciones administradas
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Firmar los resultados del proyecto en un proyecto de


Visual C++ (Dispositivos)
En los pasos siguientes se supone que tiene un proyecto de Visual C++ para Smart Device en su solución. Para obtener más
información, vea Programar para dispositivos con Visual C++.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para firmar el resultado del proyecto en un proyecto de dispositivos de Visual C++


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de Visual C++ y haga clic
en Propiedades en el menú contextual.
2. Expanda la página Firmar con Authenticode.
3. Para la propiedad Firma Authenticode, seleccione Sí.
4. Para la propiedad Certificado, haga clic en el botón de puntos suspensivos (…).
5. En el cuadro de diálogo Seleccionar certificado:
Si el certificado que desea aparece en la lista, selecciónelo y haga clic en Aceptar para cerrar el cuadro de diálogo.
Si el certificado que desea no aparece en la lista, haga clic en Administrar certificados para abrir el cuadro de
diálogo Administrar certificados. Para obtener más información, vea Cómo: Importar y aplicar certificados en
proyectos de dispositivos.
Cuando termine de adquirir su certificado, haga clic en Aceptar en el cuadro de diálogo Seleccionar certificado.
El certificado aparece en la fila Certificado de la página Firmar con Authenticode.
6. En la página Firmar con Authenticode, haga clic en Aceptar.
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Firmar un archivo CAB (Dispositivos)


En los pasos siguientes se asume que dispone de un proyecto Cab de Smart Device en su solución. Para obtener más
información, vea Información general sobre el empaquetado de soluciones para dispositivos.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para firmar un archivo .cab de Smart Device


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto Cab de Smart Device y
haga clic en Propiedades en el menú contextual.
2. En la página Generar, seleccione Firma Authenticode.
3. Haga clic en Seleccionar del almacén.
4. En el cuadro de diálogo Seleccionar certificado:
Si el certificado que desea aparece en la lista, selecciónelo y haga clic en Aceptar para cerrar el cuadro de diálogo.
Si el certificado que desea no aparece en la lista, haga clic en Administrar certificados para abrir el cuadro de
diálogo Administrar certificados. Para obtener más información, vea Cómo: Importar y aplicar certificados en
proyectos de dispositivos.
Cuando termine de adquirir su certificado, haga clic en Aceptar en el cuadro de diálogo Seleccionar certificado.
El certificado aparece en el cuadro Certificado de la página Generar.
5. En la página Generar, haga clic en Aceptar.
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Poner en servicio un dispositivo en un proyecto de


Visual Basic o Visual C#
Poner en servicio un dispositivo significa agregar certificados digitales a los almacenes de certificados del dispositivo. Para
obtener más información, vea A Practical Guide to the Smartphone Security and Code Signing Model for Developers (Guía
práctica del modelo de seguridad y firma de código para Smartphone para desarrolladores).
En los pasos siguientes se supone:
Tiene un proyecto de Visual Basic o Visual C# para Smart Device en su solución. Para obtener más información, vea
Programación para dispositivos con .NET Compact Framework.
Ha firmado la aplicación. Para obtener más información, vea Cómo: Firmar una aplicación de Visual Basic o Visual C#
(Dispositivos).
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para poner en servicio un dispositivo en un proyecto de dispositivo administrado


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de Visual Basic o Visual C#
y haga clic en Propiedades en el menú contextual.
2. Abra la página Dispositivos.
3. En el cuadro Suministro de dispositivos, seleccione una de las opciones siguientes:
No poner en servicio el dispositivo de destino
Poner en servicio el almacén con privilegios
Poner en servicio el almacén sin privilegios
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Poner en servicio un dispositivo en un proyecto de


Visual C++
Para realizar el siguiente procedimiento:
Es necesario tener un proyecto Smart Device de Visual C++ en la solución. Para obtener más información, vea
Programar para dispositivos con Visual C++.
Es necesario que esté firmado el resultado del proyecto del proyecto de Visual C++. Para obtener más información sobre
cómo firmar los proyectos de Visual C++, vea Cómo: Firmar los resultados del proyecto en un proyecto de Visual C++
(Dispositivos).
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para poner en servicio un dispositivo en un proyecto de dispositivos de Visual C++


1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto de Visual C++ y haga clic
en Propiedades en el menú contextual.
2. Expanda la página Firmar con Authenticode.
3. En la propiedad Dispositivo de provisión, seleccione Almacén de certificados con privilegios o Almacén de
certificados sin privilegios.
4. En la página Firmar con Authenticode, haga clic en Aceptar.
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Poner en servicio un dispositivo con un modelo de


seguridad
Puede establecer el modelo de seguridad de un dispositivo explícitamente para probar una aplicación bajo los distintos
modelos de seguridad. Si el dispositivo ya se encuentra bloqueado por el fabricante de equipos originales (OEM), es probable
que no se pueda poner en servicio con un modelo de seguridad diferente. Sin embargo, si no se bloquea el dispositivo, puede
ponerlo en servicio con cualquier modelo de seguridad.
Visual Studio 2005 incluye los siguientes archivos XML de modelo de seguridad. La ubicación predeterminada es \Archivos de
programa\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools\SecurityModels.
Locked.xml, que establece el siguiente modelo de seguridad de dos niveles:
Mensaje de confirmación previo a la ejecución de aplicaciones.
No ejecutar las aplicaciones sin firmar.
Prompt.xml, que establece el siguiente modelo de seguridad de dos niveles:
Mensaje de confirmación previo a la ejecución de aplicaciones.
Ejecutar las aplicaciones sin firmar sin privilegios.
Open.xml, que establece el siguiente modelo de seguridad de un nivel:
Sin mensaje de confirmación.
Ejecutar todas las aplicaciones, incluidas las no firmadas, con privilegios.
Para obtener más información, vea Provisioning for Windows Mobile-Based Devices.
Para poner en servicio un dispositivo con un modelo de seguridad, se requieren los siguientes componentes:
ActiveSync.
RapiConfig.exe, ubicado de manera predeterminada en \Archivos de programa\Microsoft Visual Studio
8\SmartDevices\SDK\SDKTools.
Archivo XML de seguridad.
Para poner en servicio un dispositivo con un modelo de seguridad
1. Establezca una conexión ActiveSync en el dispositivo.
2. Escriba el siguiente comando en el símbolo del sistema (donde securityfile.xml es el archivo XML del modelo de
seguridad):

RapiConfig.exe /P /M <securityfile.xml>

Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Consultar un dispositivo para conocer su modelo de


seguridad
Puede consultar un dispositivo para ver qué certificados están instalados en su almacén de certificados. Puede utilizar esa
información para determinar con qué certificado desea firmar la aplicación.
Para hacer una consulta, se ejecuta RapiConfig.exe y se pasa un archivo XML StoreQuery, que contiene la consulta del almacén
de certificados. RapiConfig.exe genera un archivo XML que contiene el resultado de la consulta.
RapiConfig.exe, CertStoreQuery.xml y otros archivos xml de consulta están ubicados de forma predeterminada en \Archivos de
programa\Microsoft Visual Studio 8\SmartDevices\SDK\SDKTools.
Los siguientes componentes son necesarios para consultar el almacén de certificados del dispositivo:
ActiveSync.
RapiConfig.exe.
Archivo XML de consulta del almacén de certificados (CertStoreQuery.xml).
Para consultar el modelo de seguridad de un dispositivo
1. Establezca una conexión ActiveSync en el dispositivo.
2. Escriba el siguiente comando en el símbolo del sistema (donde certstorequery.xml es el archivo XML de consulta del
almacén de certificados):

Rapiconfig.exe /P /M <certstorequery.xml>

3. Vea el archivo RapiConfigOut.xml generado.


Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cómo: Iniciar Signtool.exe como evento posterior a la


generación (Dispositivos)
Ejecute signtool.exe como un evento posterior a la generación cuando otros eventos posteriores a la generación cambien los
archivos binarios originales. La modificación de los archivos binarios firmados invalida la firma original.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valore
s de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones
del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para iniciar signtool.exe como un evento posterior a la generación en proyectos de Visual Basic y
Visual C#
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto y haga clic en Propiedades
en el menú contextual.
2. En la página Eventos de generación (Visual C#) o la página Compilar (Visual Basic), haga clic en Edición posterior a
la generación.
3. En el cuadro de diálogo Línea de comandos del evento posterior a la generación, escriba la línea de comandos de
signtool con las opciones de su elección.
Para obtener más información sobre cómo ejecutar signtool desde la línea de comandos, vea SignTool.
Para iniciar signtool.exe como un evento posterior a la generación en proyectos de dispositivos de
Visual C++
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto y haga clic en Propiedades
en el menú contextual.
2. En Propiedades de configuración, expanda el nodo Eventos de generación.
3. Haga clic en Evento posterior a la generación.
4. Seleccione la propiedad Línea de comandos y, a continuación, haga clic en el botón de puntos suspensivos (…) para
abrir el cuadro de diálogo Línea de comandos.
5. Escriba la línea de comandos de signtool con las opciones de su elección.
Para obtener más información sobre cómo ejecutar signtool desde la línea de comandos, vea SignTool.
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)


Los ejemplos de proyectos siguientes ilustran la sintaxis, la estructura y las técnicas empleadas para resolver diversas
dificultades de la programación para dispositivos.
En esta sección
Ejemplos de dispositivos inteligentes
Proporciona los proyectos ya generados para la inspección.
Tutoriales sobre dispositivos inteligentes
Proporciona instrucciones paso a paso sobre cómo crear tipos diferentes de aplicaciones y componentes. Incluye tanto
proyectos administrados como proyectos nativos.
Secciones relacionadas
Ejemplos de Visual Studio
Ofrece ejemplos que ilustran el funcionamiento de las aplicaciones.
Tutoriales de Visual Studio
Ilustra la creación de distintos tipos de aplicaciones y componentes en diversos lenguajes de programación.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Centro para desarrolladores de Mobile
Desarrollo para Smart Device

Tutoriales sobre dispositivos inteligentes


Este tema se ha actualizado para Visual Studio 2005 SP1.
Estos tutoriales ofrecen instrucciones paso a paso para implementar diversas tareas en los proyectos para dispositivos
inteligentes. En cada tutorial se proporcionan procedimientos para desarrollar un tipo concreto de aplicación para dispositivos.
Los tutoriales de Visual Studio diseñados para aplicaciones de escritorio normalmente no pueden funcionar sin modificaciones
en las aplicaciones de dispositivos, fundamentalmente porque una o más clases disponibles en .NET Framework no están
presentes en .NET Compact Framework.
El dispositivo de destino predeterminado que se utiliza en los tutoriales siguientes es el emulador, lo que le permite finalizarlos
sin necesidad de un dispositivo físico. Si tiene conectado un dispositivo físico que se comunica con el equipo de desarrollo,
puede usar como destino este dispositivo en lugar del emulador. Para obtener más información, vea Requisitos de hardware y
software de los proyectos para Smart Device.
Nota
Algunos elementos de la interfaz (por ejemplo, el Asistente para nuevo proyecto) pueden ocultar el texto de un tutorial. Una f
orma de solucionar este problema consiste en cambiar el visor de ayuda desde el explorador del entorno de desarrollo integ
rado (IDE) de Visual Studio a una ventana externa. Para efectuar este cambio, en el menú Herramientas, haga clic en Opcio
nes, Entorno y después en Ayuda. Seleccione Ayuda externa y reinicie el IDE para que los cambios surtan efecto.

La tabla siguiente se ha actualizado para SP1 de Visual Studio 2005.


En esta sección
Tutorial: Crear aplicaciones de Windows Forms para un dispositivo
Describe cómo desarrollar una aplicación sencilla de formularios Windows Forms y cómo descargarla en un dispositivo
inteligente.
Tutorial: Crear controles de usuario para dispositivos
Muestra cómo crear un control de usuario en proyectos de dispositivos administrados.
Tutorial: Agregar un atributo simple a un control de usuario
Describe cómo personalizar controles de usuario en proyectos de dispositivos.
Tutorial: Aplicación Principal-Detalle para una base de datos
Describe cómo establecer una base de datos de SQL Server Mobile o SQL Server Compact Edition como origen de datos,
cómo arrastrar objetos enlazados a controles a un formulario de Windows, cómo configurar una relación principal-detalle,
etc.
Tutorial: Aplicación de consulta parametrizada
Describe cómo establecer una base de datos de SQL Server Mobile o SQL Server Compact Edition como origen de datos,
cómo arrastrar objetos enlazados a controles a un formulario de Windows y cómo incluir una consulta parametrizada en la
aplicación.
Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para Smart Devices
Muestra cómo un proyecto administrado puede alojar un objeto COM.
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Describe cómo destinar varios dispositivos.
Tutorial: Crear una aplicación MFC multiplataforma para Smart Devices
Describe cómo generar una aplicación MFC cuyos destinos pueden ser varias plataformas.
Tutorial: Crear un control ActiveX MFC multiplataforma para Smart Devices
Describe cómo generar un control ActiveX MFC.
Tutorial: Crear un control ActiveX ATL multiplataforma para Smart Devices
Describe cómo crear un proyecto ATL de dispositivo inteligente para varias plataformas y un control ALT simple.
Secciones relacionadas
Tutorial: Depurar una solución que incluye código administrado y código nativo
Describe los pasos para iniciar como alternativa los depuradores nativos y administrados.
Tutorial: Empaquetar una solución Smart Device para su implementación
Describe cómo generar un archivo CAB para entregarlo a usuarios finales e instalarlo en un dispositivo y cómo usar el IDE en
lugar de configurar el archivo .inf manualmente para modificar varias opciones de configuración.
Ejemplos de dispositivos inteligentes
Proporciona proyectos que muestran aplicaciones basadas en .NET Compact Framework, así como vínculos a ejemplos
utilizando código nativo.
Tutoriales de Visual Studio
Ofrece instrucciones paso a paso para diversos tipos de aplicaciones para el escritorio.
Vea también
Otros recursos
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Desarrollo para Smart Device

Tutorial: Crear aplicaciones de Windows Forms para un


dispositivo
En este tutorial, se generará una sencilla aplicación de Windows Forms, ya sea con Visual Basic o Visual C#, y después dicha
aplicación se ejecutará en el emulador de Pocket PC. Este tutorial muestra la diferencia principal existente entre la
programación de escritorio y la programación de dispositivos, esto es, que se debe establecer como destino para un
dispositivo. En este tutorial, el dispositivo es un emulador integrado de Pocket PC 2003.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar su configuración, elija Importar y exportar configuraciones en el menú Herramientas.
Para obtener más información, vea Valores de configuración de Visual Studio.

Para escribir el tutorial se utilizó la configuración de desarrollo de Visual Basic y la configuración de desarrollo de Visual C#.
El tutorial consta de cinco tareas principales:
Crear un proyecto de dispositivos que utiliza formularios Windows Forms.
Agregar un control al formulario.
Agregar control de eventos al control.
Seleccionar un dispositivo en el que se ejecutará el proyecto.
Compilar e implementar la aplicación en el dispositivo.
Seleccionar un dispositivo de destino
Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General. Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte
inferior del cuadro de diálogo Opciones.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Crear la aplicación
La creación de un proyecto de formulario Windows Forms, así como la adición de controles y del control de eventos, siguen el
mismo proceso en los proyectos para dispositivos que en los proyectos para el escritorio. La diferencia principal radica en el
menor número de clases que están disponibles en .NET Compact Framework.
Para crear un proyecto para dispositivos que utiliza formularios Windows Forms
1. (Visual Basic) En el menú Archivo de Visual Studio 2005, haga clic en Nuevo proyecto.
— o bien —
(Visual C#) En el menú Archivo de Visual Studio 2005, seleccione Nuevo y haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Visual Basic o Visual C#, expanda
Dispositivo inteligente y, a continuación, haga clic en Pocket PC 2003.
Si el lenguaje que desea no aparece desde un principio, expanda Otros lenguajes. Su configuración de desarrollo rige
esta pantalla.
3. En Plantillas, haga doble clic en Aplicación de dispositivo.
4. En el cuadro Nombre, escriba DeviceSample y, a continuación, haga clic en Aceptar.
5. (Visual C# sólo) En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto y, a continuación,
haga clic en Aceptar.
Una representación de un dispositivo Pocket PC aparece en el Diseñador de Windows Forms.
Para agregar un control al formulario
1. En el Cuadro de herramientas, arrastre un control Button al formulario.
Si el Cuadro de herramientas no está visible, haga clic en Cuadro de herramientas en el menú Ver.
Si la ficha Controles de dispositivo no está visible en el Cuadro de herramientas, haga clic con el botón secundario
del mouse en el Cuadro de herramientas y, a continuación, haga clic en Mostrar todo.
2. Haga clic con el botón secundario en el control Button y seleccione Propiedades.
3. En la ventana Propiedades, escriba Say Hello y presione ENTRAR para establecer la propiedad Texto.
Para agregar control de eventos al control Button
1. Haga doble clic en el botón del formulario.
Se abrirá el Editor de código, con el punto de inserción en el controlador de eventos.
2. Inserte el siguiente código de Visual Basic:

MessageBox.Show("Hello, World!")

— o bien —
Inserte el código siguiente de C#:

MessageBox.Show("Hello, World!");

Generar y probar la aplicación


Aquí aparece una diferencia con respecto a los proyectos para el escritorio. En un proyecto para dispositivos, habitualmente
puede elegir varios destinos para la ejecución del programa. En este tutorial elegirá un emulador de Pocket PC. Si ya tiene
asociado un dispositivo físico compatible con el equipo de desarrollo, también puede seleccionar el dispositivo físico.
Para generar y probar la aplicación
1. En el menú Depurar, haga clic en Iniciar (o Iniciar depuración).
2. En el cuadro de diálogo Implementar, seleccione Pocket PC 2003 SE - Emulador y haga clic en Implementar.
Puede ver el progreso en la barra de estado.
3. Cuando ejecute la aplicación en el emulador, toque el botón para verificar que aparece el mensaje "Hola a todos".
Prepararse para tutoriales adicionales
Si piensa seguir tutoriales adicionales o abrir otros proyectos, deseará cerrar el emulador y salir de esta solución.
Para cerrar el emulador y la solución
1. En el menú Archivo del emulador, haga clic en Salir.
2. En el cuadro de mensaje Emulador de dispositivos, haga clic en No en el mensaje ¿Desea guardar el estado antes
de salir?.
3. En el menú Depurar de Visual Studio, haga clic en Detener depuración.
4. Si aparece un mensaje que indica que se ha perdido la conexión, haga clic en Aceptar.
5. En el menú Archivo, haga clic en Cerrar solución.
Vea también
Tareas
Tutorial: Crear un formulario Windows Forms sencillo
Referencia
General, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Cuadro de herramientas
Otros recursos
Tutoriales sobre dispositivos inteligentes
Desarrollo para Smart Device

Tutorial: Crear controles de usuario para dispositivos


En este tutorial se crean una biblioteca de controles y un control de usuario para colocarlo en la biblioteca. Se distingue entre
un control de usuario, una combinación de controles de formularios Windows Forms en una unidad reutilizable única, y un
control personalizado, un control que requiere una interfaz de usuario o una funcionalidad no disponibles mediante controles
estándar.
El control de usuario de este tutorial es una pantalla de reloj simple para dispositivos, y se modela de acuerdo con tutoriales de
escritorio similares, como Tutorial: Crear un control compuesto con Visual Basic y Tutorial: Crear un control compuesto con
Visual C#.
El tutorial consta de cuatro tareas principales:
Crear una biblioteca de controles y un control.
Cambiar el nombre de la biblioteca y del control.
Agregar componentes al control.
Probar el control en el emulador de dispositivos.
Puede utilizar Visual Basic o Visual C# para este tutorial. Cuando ambos lenguajes requieran el mismo nombre de archivo pero
con una extensión específica del lenguaje, una barra vertical recordará que se ha de elegir la extensión correspondiente al
lenguaje que se esté utilizando, como en NombreDeArchivo.vb|cs.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija Importar y exportar configuraciones en el menú Herramientas.
Para obtener más información, vea Valores de configuración de Visual Studio.
Para escribir el tutorial se utilizó la configuración de desarrollo de Visual Basic y la configuración de desarrollo de Visual C#.

Requisitos previos
Ninguno.
Seleccionar un dispositivo de destino
Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic en Herramientas de dispositivo y, a continuación, en
General.
Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte inferior del
cuadro de diálogo Opciones.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Crear el proyecto
El nombre que se proporciona a un nuevo proyecto también establece el espacio de nombres de la raíz y el nombre de
ensamblado.
Para crear la biblioteca de controles y el control
1. (Visual Basic) En el menú Archivo, haga clic en Nuevo proyecto.
O bien
(Visual C#) En el menú Archivo, elija Nuevo y haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Visual Basic o Visual C#, expanda Smart
Device y, a continuación, haga clic en Pocket PC 2003.
Si el lenguaje que desea no aparece desde un principio, expanda Otros lenguajes. Su configuración de desarrollo rige
esta pantalla.
3. En Plantillas, haga clic en Biblioteca de controles.
4. En el cuadro Nombre, escriba ctlDevClockLib.
5. (Visual C# sólo) En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.
6. Haga clic en Aceptar.
Aparece el Diseñador de componentes.
Ya ha especificado el nombre del proyecto, el espacio de nombres de la raíz y el nombre de ensamblado (ctlDevClockLib). Sin
embargo, los componentes del proyecto tienen nombres predeterminados asignados por Visual Studio (por ejemplo,
UserControl1). Lo normal es que desee cambiar estos nombres por términos más significativos.
Para cambiar el nombre de la biblioteca y del control.
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en UserControl1.vb|cs y, a continuación,
haga clic en Propiedades en el menú contextual.
2. Cambie el Nombre de archivo a ctlDevClock.vb|cs.
3. (Sólo Visual C#) En el cuadro de mensaje donde se pregunta si desea cambiar el nombre de todas las referencias a este
elemento de código, haga clic en Sí.
El cambio de nombre en la ventana Propiedades ahora se extiende a otras referencias, como el nombre de clase y el
constructor.
A continuación, agregue componentes del Cuadro de herramientas para proporcionar funcionalidad e interacción con el
usuario al control de usuario. En este tutorial, agregará un control Temporizador para tener acceso a la hora del sistema y un
control Label para mostrar la hora.
Para agregar componentes y cambiar sus propiedades
1. En el Cuadro de herramientas, haga doble clic en Label.
Se agrega un control Label al control de usuario en el Diseñador de componentes.
2. En la ventana Propiedades del control Label, realice las acciones siguientes:
Propiedad Cambie a
Name lblDisplay

Text (Espacio en blanco)

TextAlign TopCenter

Font.Size 14

1. En el Cuadro de herramientas, haga doble clic en Timer.


Aparecerá un control Timer en la bandeja de componentes.
2. En la ventana Propiedades del control Timer, realice las acciones siguientes:
Propiedad Cambie a
Interval 1000

Enabled True

1.
En los pasos siguientes, agregará un controlador de eventos para mostrar los impulsos de reloj en el control Label.
Para agregar un controlador de eventos
1. En la bandeja de componentes, haga doble clic en timer1 para abrir el editor de código en el evento Tick.
2. (Visual Basic) Inserte este código de control de eventos:

lblDisplay.Text = Format(Now, "hh:mm:ss")

— o bien —
(Visual C#)

lblDisplay.Text = DateTime.Now.ToLongTimeString();

3. (Visual Basic) Cambie el modificador de acceso de Private a Protected y agregue la palabra clave Overridable para que
el código del controlador tenga el aspecto siguiente:

Protected Overridable Sub Timer1_Tick(ByVal sender As Object, _


ByVal e As System.EventArgs) Handles Timer1.Tick
' Causes the label to display the current time
lblDisplay.Text = Format(Now, "hh:mm:ss")
End Sub

— o bien —
(Visual C#) Cambie el modificador de acceso de private a protected y agregue la palabra clave virtual para que el
código del controlador tenga el aspecto siguiente:

protected virtual void timer1_Tick(object sender, System.EventArgs


e)
{
// Causes the label to display the current time.
lblDisplay.Text = DateTime.Now.ToLongTimeString();
}

4. En el menú Archivo, haga clic en Guardar todo.


5. (Visual Basic sólo) En el cuadro de diálogo Guardar proyecto, guarde el proyecto como ctlDevClockLib en una
ubicación de su elección.
Probar el control
Esta aplicación para dispositivos simple actúa como un contenedor de prueba para el control.
Para generar el control y crear un contenedor de prueba
1. En el menú Generar, haga clic en Generar (o en Generar ctlDevClockLib).
2. En el menú Archivo, elija Agregar y, después, haga clic en Nuevo proyecto.
3. En el cuadro de diálogo Agregar nuevo proyecto, haga clic en Pocket PC 2003 en el panel Tipos de proyecto y, a
continuación, haga clic en Aplicación de dispositivo en el panel Plantillas.
4. En el cuadro Nombre, escriba Prueba y, a continuación, haga clic en Aceptar.
5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto Prueba y, a continuación,
en Establecer como proyecto de inicio.
6. De nuevo, haga clic con el botón secundario del mouse en el proyecto Prueba y, a continuación, haga clic en Agregar
referencia.
7. En el cuadro de diálogo Agregar referencia, haga clic en la ficha Proyectos y, a continuación, haga doble clic en
ctlDevClockLib.
8. En el Cuadro de herramientas, busque la ficha Componentes de ctlDevClockLib y, a continuación, haga doble clic en
el componente ctlDevClock.
El control se carga en el diseñador.
9. En el menú Depurar, haga clic en Iniciar (o Iniciar depuración).
10. En el cuadro de diálogo Implementar, seleccione Pocket PC 2003 SE - Emulador y haga clic en Implementar.
Vea también
Conceptos
Recomendaciones sobre tipos de controles
Otros recursos
Desarrollar controles de formularios Windows Forms en tiempo de diseño
Desarrollo para Smart Device

Tutorial: Agregar un atributo simple a un control de usuario


Este tutorial muestra cómo agregar un atributo a un control de usuario en un proyecto de dispositivo. Más concretamente, se
agrega un atributo personalizado que hace que una propiedad del control no pueda verse en tiempo de diseño. Puede que
desee agregar esta característica a un proyecto para evitar que el valor de una propiedad cambie.
Este proceso es parecido al relacionado con el escritorio, con la salvedad de que los proyectos de dispositivos almacenan esta
información el archivos de metadatos separados (.xmta).
Nota
Los comandos de menú y cuadros de diálogo que pueden verse, son diferentes a los descritos en la Ayuda dependiendo de l
a edición o de los valores de configuración que se encuentren activos. Para cambiar los valores de configuración, elija Import
ar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visu
al Studio.
Este tutorial ha sido escrito utilizando la configuración de desarrollo de Visual C#.

Para crear la clase UserControl1


1. En el menú Archivo, seleccione Nuevo y, a continuación, haga clic en Proyecto.
2. En el panel Tipos de proyecto, expanda Visual C#, expanda Smart Device y, a continuación, haga clic en Pocket PC
2003.
3. En el panel Plantillas, haga clic en Biblioteca de controles.
4. En el cuadro Nombre, escriba MyControlLibrary y, a continuación, haga clic en Aceptar.
El diseñador se abre con un cuadro que representa la nueva clase de control de usuario.
Para agregar una propiedad
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en UserControl1.cs y, a continuación, en
el menú contextual, haga clic en Ver diagrama de clase.
Se abre un rectángulo redondeado que representa el diagrama de clase.
2. Haga clic con el botón secundario del mouse en el diagrama de clase y, a continuación, en el menú contextual, haga clic
en Detalles de clase.
3. En la sección Propiedades de la ventana Detalles de clase, en el símbolo del sistema <Agregar propiedad>, escriba
MyProperty.
4. En la columna Tipo, sustituya int por string.
5. Haga clic con el botón secundario del mouse en el icono que aparece al principio de la fila MyProperty y, a continuación,
en el menú contextual, haga clic en Propiedades.
6. Con el fin de especificar un valor para la propiedad Custom Attributes, haga clic en el botón de puntos suspensivos (…)
y así abrir el cuadro de diálogo Atributos personalizados.
7. Escriba Browsable(false) y, a continuación, haga clic en Aceptar.
El Explorador de soluciones muestrea un archivo de atributos en tiempo de diseño .xmta (DesignTimeAttributes.xmta)
que contiene el atributo personalizado.
Para generar la biblioteca de controles
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en UserControl1.cs y, a continuación, en
el menú contextual, haga clic en Ver código.
2. Marque como comentario la línea que produce la excepción System.NotImplementedException e inserte return ""; en
lugar de la acción get.
3. En el menú Generar, haga clic en Generar MyControlLibrary.
Para comprobar que MyProperty no aparece en el examinador de propiedades
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en MyControlLibrary, en el menú
contextual, seleccione Agregar y, a continuación, haga clic en Nuevo elemento.
2. En el cuadro de diálogo Agregar nuevo elemento, seleccione Formulario Windows Forms y, a continuación, haga clic
en Agregar.
3. Desde el Cuadro de herramientas, arrastre UserControl1 hasta el formulario.
4. Haga clic con el botón secundario del mouse en la imagen de control de usuario del formulario y, a continuación, en el
menú contextual, haga clic en Propiedades.
MyProperty no aparece en el explorador Propiedad.
5. En el Explorador de soluciones, haga doble clic en el archivo .xmta y, a continuación, reemplace false por true.
6. Repita los pasos para ver la cuadrícula Propiedades. Observe que, ahora, aparece MyProperty.
Vea también
Otros recursos
Tutoriales sobre dispositivos inteligentes
Desarrollo para Smart Device

Tutorial: Aplicación Principal-Detalle para una base de datos


Este tema se ha actualizado para Visual Studio 2005 SP1.
Este tutorial muestra cómo utilizar el entorno Visual Studio 2005 para conectarse a una base de datos, seleccionar objetos de
la base de datos para incluirlos en un proyecto y crear controles con vinculación a datos con el fin de mostrar dichos datos en
una aplicación Smart Device.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar su configuración, elija Importar y exportar configuraciones en el menú Herramientas.
Para obtener más información, vea Valores de configuración de Visual Studio.
Para escribir el tutorial se utilizó la configuración de desarrollo de Visual Basic y la configuración de desarrollo de Visual C#.

Requisitos previos
Base de datos Northwind para SQL Server Mobile Edition (incluida en Visual Studio 2005).
Base de datos Northwind para Microsoft SQL Server 2005 Compact Edition (incluida al instalar SQL Server Compact Edition
para su uso con Visual Studio 2005 SP1).
Nota
Si no es un administrador de su equipo de desarrollo, no podrá abrir el archivo Northwind.sdf en su ubicación predetermin
ada (\Archivos de programa\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0). Copie el archivo en el es
critorio o en Mis documentos y ábralo desde allí cuando se le solicite.

El procedimiento siguiente se ha actualizado para SP1 de Visual Studio 2005.


Seleccionar un dispositivo de destino
Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Crear la aplicación
Ésta es una aplicación de Windows Forms simple para alojar la funcionalidad de los datos de este tutorial.
Para crear un proyecto de dispositivos de formularios Windows Forms
1. (Visual Basic) En el menú Archivo de Visual Studio 2005, haga clic enNuevo proyecto.
— o bien —
(Visual C#) En el menú Archivo de Visual Studio 2005, señale a Nuevoy, a continuación, haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Visual Basic o Visual C#, expanda
Dispositivo inteligente y, a continuación, haga clic en Pocket PC 2003.
Si el lenguaje que desea no aparece desde un principio, expanda Otros lenguajes. Su configuración de desarrollo rige
esta pantalla.
3. En Plantillas, haga doble clic en Aplicación de dispositivo.
Nota
No seleccione Aplicación de dispositivo (1.0) que aparece en la versión 1 de .NET Compact Framework y no es adec
uado para este tutorial.

4. En el cuadro Nombre, escriba MasterDetailSample.


5. (Visual C# sólo) En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.
6. Haga clic en Aceptar.
Una representación de un dispositivo Pocket PC aparece en el Diseñador de Windows Forms.
Agregar la funcionalidad de datos
En esta sección aparecen las siguientes tareas:
Seleccionar un tipo de origen de datos
Seleccionar y configurar una conexión de datos
Seleccionar objetos de base de datos
Agregar controles con enlace a datos al formulario
Para seleccionar un tipo de origen de datos
1. En el menú Datos, haga clic en Agregar nuevo origen de datos para abrir el Asistente para la configuración de
orígenes de datos.
2. En la página Elegir un tipo de origen de datos, seleccione Base de datos y, a continuación, haga clic en Siguiente.
Para seleccionar y configurar una conexión de datos
1. En la página Elegir la conexión de datos, haga clic en Nueva conexión.
2. En el cuadro de diálogo Elegir origen de datos, seleccione Microsoft SQL Server Mobile Edition y, a continuación,
haga clic en Continuar.
O bien
En el cuadro de diálogo Elegir origen de datos, seleccione Microsoft SQL Server Compact Edition y, a continuación,
haga clic en Continuar.
Nota
Dependiendo de la configuración y los proyectos anteriores, el cuadro de diálogo Agregar conexión podría aparecer
en lugar del cuadro de diálogo Elegir origen de datos. Si esto pasa, haga clic en Cambiar en el cuadro de diálogo Ag
regar conexión para abrir el cuadro de diálogo Cambiar origen de datos. A continuación, seleccione Microsoft SQL
Server Mobile Edition o Microsoft SQL Server Compact Edition y haga clic en Aceptar.

3. En el cuadro de diálogo Agregar conexión, seleccione Mi PC.


4. De nuevo, en el cuadro de diálogo Agregar conexión, haga clic en Examinar.
5. En el cuadro de diálogo Seleccionar archivo de base de datos de SQL Server Mobile Edition, seleccione
Northwind.sdf y, a continuación, haga clic en Abrir.
O bien
En el cuadro de diálogo Seleccionar archivo de base de datos de SQL Server Compact Edition, seleccione
Northwind.sdf y, a continuación, haga clic en Abrir.
6. En el cuadro de diálogo Agregar conexión, deje el cuadro Contraseña vacío.
Esta base de datos no tiene ninguna contraseña.
7. Haga clic en Probar conexión para comprobar la conexión.
Nota
Si se le deniega el acceso al archivo Northwind.sdf, copie el archivo en el escritorio y vaya hasta esa copia para abrirla
. Esta situación puede producirse si no se cuenta con suficientes derechos en el equipo de desarrollo para abrir el archi
vo en la ubicación predeterminada, que se describe al inicio de este tutorial.

8. Haga clic en Aceptar en el cuadro de mensaje que muestra la conexión satisfactoria y, a continuación, haga clic en
Aceptar para cerrar el cuadro de diálogo Agregar conexión.
9. Cierre la página Elegir la conexión de datos haciendo clic en Siguiente.
10. En el cuadro de mensaje que pregunta si el usuario desea copiar el archivo en el correspondiente proyecto, haga clic en
Sí.
Para seleccionar objetos de base de datos
1. En la página Elija los objetos de base de datos, expanda el nodo Tables y, a continuación, seleccione las tablas
Customers y Orders.
2. Haga clic en Finalizar.
Se crea NorthwindDataset. Puede ver este origen de datos seleccionando Mostrar orígenes de datos en el menú
Datos.

Para agregar controles con enlace a datos al formulario


1. En la ventana Orígenes de datos, seleccione la tabla Customers, haga clic en la flecha desplegable y seleccione la
opción Cuadrícula de datos.
2. Arrastre la tabla Customers desde la ventana Orígenes de datos al formulario del diseñador.
Busque la cuadrícula que aparece en la parte superior de la ventana.
3. En la ventana Orígenes de datos, expanda la tabla Customers para exponer la tabla Orders.
Nota
Esta es la tabla Orders tal y como aparece en la tabla Customers, no la tabla Orders que aparece en el mismo nivel de
árbol que la tabla Customers.

4. Haga clic en la flecha de lista desplegable para esta tabla Orders y seleccione la opción Cuadrícula de datos.
5. Arrastre la tabla Orders desde la ventana Orígenes de datos hasta el formulario del diseñador.
Busque la cuadrícula que aparece en la parte inferior de la ventana.
Probar la aplicación
En esta sección se genera la aplicación, descárguela en el emulador SE de Pocket PC 2003 y compruebe que la aplicación
funciona correctamente.
Para probar la aplicación
1. En el menú Depurar, haga clic en Inicio o Iniciar depuración.
2. En el cuadro de diálogo Implementar, seleccione Emulador SE de Pocket PC 2000 y haga clic en Implementar.
El progreso de la implementación aparece en la barra de estado. La implementación en el emulador puede tardar algún
tiempo.
3. Cuando la aplicación se ejecuta en el emulador, utilice las flechas arriba y abajo del teclado o el control de exploración
NAVIGATION del emulador para cambiar los registros seleccionados en la cuadrícula Customers. Compruebe que los
registros seleccionados cambian en la cuadrícula Orders.
Prepararse para tutoriales adicionales
Si piensa seguir tutoriales adicionales o abrir otros proyectos, deseará cerrar el emulador y salir de esta solución.
Para cerrar el emulador y la solución
1. En el menú Archivo del emulador, haga clic en Salir.
2. En el cuadro de mensaje Emulador de dispositivos, haga clic en No en el mensaje que pregunta si desea guardar el
estado del emulador.
3. En el cuadro de mensaje que indica que se ha perdido la conexión, haga clic en Aceptar.
4. (Visual Basic) En el menú Archivo, haga clic en Cerrar proyecto.
Si se le solicita que guarde el proyecto o la solución, haga clic en Guardar si desea volver a utilizarlo posteriormente; de
no ser así, haga clic en Descartar y los archivos no se guardarán.
— o bien —
(Visual C#) En el menú Archivo, haga clic en Cerrar solución.
Vea también
Tareas
Cómo: Instalar bases de datos de ejemplo
Referencia
Asistente para la configuración de orígenes de datos
Otros recursos
Tutoriales sobre datos
Obtener acceso a datos (Visual Studio)
Desarrollo para Smart Device

Tutorial: Aplicación de consulta parametrizada


Este tema se ha actualizado para Visual Studio 2005 SP1.
Este tutorial muestra cómo utilizar el entorno Visual Studio 2005 para desarrollar una aplicación de consulta parametrizada
simple. Tanto el enlace de datos como gran parte de la interfaz de usuario se generan automáticamente. Se puede confiar en la
conocida base de datos Northwind, esta aplicación proporciona el escenario donde los usuario de Smart Device necesitan
especificar el país donde se realiza un envío determinado una vez que conocen el número de pedido. La aplicación que se
genera aquí proporciona los datos del usuario relacionados con el número de pedido y la presentación del país
correspondiente donde se realiza un determinado envío.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar su configuración, elija Importar y exportar configuraciones en el menú Herramientas.
Para obtener más información, vea Valores de configuración de Visual Studio.
Para escribir el tutorial se utilizó la configuración de desarrollo de Visual Basic y la configuración de desarrollo de Visual C#.

Los procedimientos siguientes se han actualizado para SP1 de Visual Studio 2005.
La base de datos instalada varía en función de la versión de Visual Studio que haya instalado:
Microsoft SQL Server Mobile Edition (Visual Studio 2005)
Microsoft SQL Server 2005 Compact Edition (SP1 de Visual Studio 2005)
Requisitos previos
La base de datos Northwind para SQL Server Mobile o SQL Server Compact Edition, incluida en Visual Studio 2005.
Nota
Si no es un administrador de su equipo de desarrollo, no puede abrir el archivo Northwind.sdf en la ubicación predetermin
ada, \Archivos de programa\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0. Copie el archivo en el esc
ritorio o en Mis documentos y ábralo desde allí cuando se le solicite.

Seleccionar un dispositivo de destino


Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Crear la aplicación
Ésta es una aplicación de Windows Forms simple para alojar la funcionalidad de los datos de este tutorial.
Para crear un proyecto de dispositivos de formularios Windows Forms
1. (Visual Basic) En el menú Archivo de Visual Studio 2005, haga clic enNuevo proyecto.
— o bien —
(Visual C#) En el menú Archivo de Visual Studio 2005, señale a Nuevoy, a continuación, haga clic en Proyecto.
2. En Tipos de proyecto, en el cuadro de diálogo Nuevo proyecto, expanda Visual Basic o Visual C#, expanda
Dispositivo inteligente y, a continuación, haga clic en Pocket PC 2003.
Si el lenguaje que desea no aparece desde un principio, expanda Otros lenguajes. Su configuración de desarrollo rige
esta pantalla.
3. En Plantillas, haga doble clic en Aplicación de dispositivo.
Nota
No seleccione Aplicación de dispositivo (1.0) que aparece en la versión 1,0 de .NET Compact Framework y no es ade
cuado para este tutorial.

4. En el cuadro Nombre, escriba ParamQuerySample.


5. (Visual C# sólo) En el cuadro Ubicación, compruebe dónde desea almacenar los archivos de proyecto.
6. Haga clic en Aceptar.
Una representación de un dispositivo Pocket PC aparece en el Diseñador de Windows Forms.
Agregar la funcionalidad de datos
En esta sección aparecen las siguientes tareas:
Seleccionar un tipo de origen de datos.
Seleccionar y configurar una conexión de datos.
Seleccionar objetos de base de datos.
Agregar controles con enlace a datos al formulario.

Para seleccionar un tipo de origen de datos


1. En el menú Datos, haga clic en Agregar nuevo origen de datos para abrir el Asistente para la configuración de
orígenes de datos.
2. En la página Elegir un tipo de origen de datos, seleccione Base de datos y, a continuación, haga clic en Siguiente.

Para seleccionar y configurar una conexión de datos


1. En la página Elegir la conexión de datos, haga clic en Nueva conexión.
2. En el cuadro de diálogo Elegir origen de datos, seleccione Microsoft SQL Server Mobile Edition y, a continuación,
haga clic en Continuar.
O bien
En el cuadro de diálogo Elegir origen de datos, seleccione Microsoft SQL Server Compact Edition y, a continuación,
haga clic en Continuar.
Nota
Dependiendo de la configuración y los proyectos anteriores, el cuadro de diálogo Agregar conexión podría aparecer
en lugar del cuadro de diálogo Elegir origen de datos. Si esto pasa, haga clic en Cambiar en el cuadro de diálogo Ag
regar conexión para abrir el cuadro de diálogo Cambiar origen de datos. A continuación, seleccione Microsoft SQL
Server Mobile Edition o Microsoft SQL Server Compact Edition y haga clic en Aceptar.

3. En el cuadro de diálogo Agregar conexión, seleccione Mi PC.


4. De nuevo, en el cuadro de diálogo Agregar conexión, haga clic en Examinar.
5. En el cuadro de diálogo Seleccionar archivo de base de datos de SQL Server Mobile Edition, seleccione
Northwind.sdf y, a continuación, haga clic en Abrir.
O bien
En el cuadro de diálogo Seleccionar archivo de base de datos de SQL Server Compact Edition, seleccione
Northwind.sdf y, a continuación, haga clic en Abrir.
6. En el cuadro de diálogo Agregar conexión, deje el cuadro Contraseña vacío.
Esta base de datos no tiene ninguna contraseña.
7. Haga clic en Probar conexión para comprobar la conexión.
Nota
Si se le deniega el acceso al archivo Northwind.sdf, copie el archivo en el escritorio y vaya hasta esa copia para abrirla
. Esta situación puede producirse si no se cuenta con suficientes derechos en el equipo de desarrollo para abrir el archi
vo en la ubicación predeterminada, que se describe al inicio de este tutorial.

8. Haga clic en Aceptar en el cuadro de mensaje que muestra la conexión satisfactoria y, a continuación, haga clic en
Aceptar para cerrar el cuadro de diálogo Agregar conexión.
9. Cierre la página Elegir la conexión de datos haciendo clic en Siguiente.
10. En el cuadro de mensaje que pregunta si el usuario desea copiar el archivo en el correspondiente proyecto, haga clic en
Sí.
Para seleccionar objetos de base de datos
1. En la página Elija los objetos de base de datos, expanda el nodo Tables y, a continuación, seleccione la tabla Orders.
2. Haga clic en Finalizar.
Se crea NorthwindDataset. Puede ver este origen de datos seleccionando Mostrar orígenes de datos en el menú
Datos.

Para crear la consulta


1. En la ventana Orígenes de datos, expanda la tabla Orders.
2. Haga clic en la columna País de envío, haga clic en la flecha desplegable y seleccione la opción Etiqueta.
3. Arrastre la columna País de envío al formulario del diseñador.
4. En el control de etiqueta del diseñador, haga clic en la etiqueta inteligente y, a continuación, en el menú contextual, haga
clic en Agregar consulta.
5. En el cuadro de diálogo Generador de criterios de búsqueda, haga clic en Generador de consultas.
6. En la columna Filtro de la fila Id de pedido, escriba un signo de interrogación (?).
Este símbolo indica que los usuarios de la aplicación tendrán que especificar un valor para Id. de pedido.
7. Haga clic en Aceptar.
La cláusula WHERE del cuadro Texto de la consulta debería aparecer ahora como ([Order ID]=@PARAM1).

8. Haga clic en Aceptar para cerrar el cuadro de diálogo Generador de criterios de búsqueda.
Aparece un panel en el formulario del diseñador.

Para refinar la interfaz de usuario


1. Haga clic con el botón secundario del mouse en el control de etiqueta PARAM1 del diseñador y, a continuación, en el
menú contextual, haga clic en Propiedades.
2. Cambie la propiedad Texto a Id de pedido.
3. Seleccione el botón Rellenar por y, a continuación, cambie su propiedad de texto a Mostrar país.
4. Expanda el panel y los controles para eliminar las barras de desplazamiento y mostrar todo el texto. Hay que tener
especial cuidado con que Ship_CountryLabel y su cuadro de texto no se ocultan detrás de FillByPanel y sus
pertinentes controles.
Probar la aplicación
En esta sección se genera la aplicación, descárguela en el emulador SE de Pocket PC 2003 y compruebe que la aplicación
funciona correctamente.
Para probar la aplicación
1. En el menú Depurar, haga clic en Inicio o Iniciar depuración.
2. En el cuadro de diálogo Implementar, seleccione Emulador SE de Pocket PC 2000 y haga clic en Implementar.
El progreso de la implementación aparece en la barra Estado. La implementación en el emulador puede tardar algún
tiempo.
3. Cuando la aplicación se ejecute en el emulador, escriba un número de pedido, entre 10000 y 11077 en la base de datos
Northwind, y, a continuación, haga clic en Mostrar país.
El país de envío para ese pedido aparece en el control de etiqueta.
Prepararse para tutoriales adicionales
Si piensa seguir tutoriales adicionales o abrir otros proyectos, deseará cerrar el emulador y salir de esta solución.
Para cerrar el emulador y la solución
1. En el menú Archivo del emulador, haga clic en Salir.
2. En el cuadro de mensaje Emulador de dispositivos, haga clic en No en el mensaje que pregunta si desea guardar el
estado del emulador.
3. (Visual Basic) En el menú Archivo, haga clic en Cerrar proyecto.
— o bien —
(Visual C#) En el menú Archivo, haga clic en Cerrar solución.
Si se le solicita que guarde el proyecto o la solución, haga clic en Guardar si desea volver a utilizarlo posteriormente; de
no ser así, haga clic en Descartar y los archivos no se guardarán.
Vea también
Tareas
Cómo: Crear consultas parametrizadas (Dispositivos)
Cómo: Instalar bases de datos de ejemplo
Referencia
Asistente para la configuración de orígenes de datos
Otros recursos
Tutoriales sobre dispositivos inteligentes
Datos en proyectos de dispositivos administrados
Desarrollo para Smart Device

Tutorial: Hola a todos: Ejemplo de interoperabilidad COM para


Smart Devices
En este tutorial se combinan en una solución un objeto COM simple y una aplicación administrada.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.
Este tutorial se ha escrito usando la configuración de desarrollo de Visual C++.

Crear un objeto COM


Para crear un proyecto ATL de Smart Device
1. En el menú Archivo, elija Nuevo, haga clic en Proyecto, expanda el nodo Visual C++ en el panel Tipos de proyecto y,
a continuación, haga clic en Smart Device.
2. En el panel Plantillas, haga clic en Proyecto ATL de Smart Device.
3. En el cuadro Nombre, escriba HelloCOMObject.
4. En el cuadro Nombre de la solución, escriba InteropSolution.
5. Haga clic en Aceptar para iniciar el Asistente para proyectos ATL de Smart Device.
6. Haga clic en Finalizar para cerrar el asistente.
Para este tutorial, no es necesario cambiar la configuración predeterminada en el asistente.
Para agregar una clase
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto HelloCOMObject, elija
Agregar y, a continuación, haga clic en Clase para abrir el cuadro de diálogo Agregar clase.
2. En el panel Categorías, haga clic en Smart Device.
3. En el panel Plantillas, haga clic en Objeto simple ATL y, a continuación, haga clic en Agregar para abrir el Asistente
para objetos simples ATL.
4. En el cuadro Nombre corto, escriba Hello.
5. En el panel izquierdo, haga clic en Opciones para abrir la página Opciones.
6. En Modelo de subprocesamiento, seleccione Libre y, a continuación, haga clic en Finalizar.
Para agregar un método a la clase
1. Abra la ventana Vista de clases desde la ficha del escritorio o desde el menú Ver.
2. Expanda HelloCOMObject para que se muestre la interfaz IHello.
3. Haga clic con el botón secundario del mouse en IHello, elija Agregar y, a continuación, haga clic en Agregar método
para abrir el Asistente para agregar métodos.
4. En el cuadro Nombre de método, escriba HelloWorld.
5. En el cuadro Tipo de parámetro, seleccione BSTR*.
6. En el cuadro Nombre de parámetro, escriba text.
7. En Atributos de parámetro, seleccione fuera.
8. Haga clic en Agregar.
El cuadro de método muestra [out] BSTR* text.

9. Haga clic en Finalizar para cerrar el Asistente para agregar métodos.


El método STDMETHOD(HelloWorld)(BSTR* text) se muestra en el archivo Hello.h.

Para agregar implementación al método


1. En el Explorador de soluciones, haga doble clic en Hello.cpp para abrir ese archivo en el Editor de código.
2. En la sección STDMETHODIMP, inserte el código de implementación siguiente antes de la instrucción return:

*text = SysAllocString(L"Hello World!");

3. En el menú Generar, haga clic en Generar HelloCOMObject.


Un objeto COM formará parte ahora de la solución con lo que finaliza la primera parte del tutorial.
Crear un proyecto administrado
Para agregar un proyecto administrado a la solución
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en InteropSolution, elija Agregar y, a
continuación, haga clic en Nuevo proyecto.
2. En el panel Tipos de proyecto, desplácese al nodo Visual C#, expándalo, expanda el nodo Smart Device y, a
continuación, haga clic en Pocket PC 2003.
3. En el panel Plantillas, haga clic en Aplicación de dispositivo.
4. En el cuadro Nombre, escriba SayHello y, a continuación, haga clic en Aceptar.
Se crea el proyecto administrado SayHello como parte de la solución y aparece un formulario de Pocket PC en la ventana
del Diseñador.
Agregar el objeto COM como referencia en el proyecto administrado
Para agregar el objeto COM como referencia en el proyecto administrado
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto SayHello y, a
continuación, haga clic en Agregar referencia en el menú contextual.
2. En el cuadro de diálogo Agregar referencia, haga clic en Examinar.
La carpeta SayHello se muestra en el cuadro Buscar en.
3. Desplácese a la carpeta primaria (en este tutorial, InteropSolution).
4. En la ventana que muestra el contenido de la carpeta, haga doble clic en HelloCOMObject, haga doble clic en Pocket
PC 2003 (ARMV4), haga doble clic en Depurar y, a continuación, haga clic en HelloCOMObject.dll.
5. Haga clic en Aceptar para cerrar el cuadro de diálogo Agregar referencia.
6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.cs y, a continuación, haga clic
en Ver código en el menú contextual.
7. En la región Using directives situada en la parte superior del archivo, agregue el código siguiente:

using HelloCOMObjectLib;

Agregar control de eventos al proyecto administrado


Para agregar control de eventos al proyecto administrado y generarlo
1. Abra el diseñador de Form1.
2. Arrastre un botón desde el Cuadro de herramientas hasta el formulario.
3. Haga doble clic en el botón para abrir el editor de código en el evento clic.
4. Inserte el código de control de eventos siguiente para el botón:

string text;
HelloClass h = new HelloClass();
h.HelloWorld(out text);
MessageBox.Show(text);

5. En el menú Generar, haga clic en Generar SayHello.


Realizar los últimos ajustes en la solución
Para configurar la solución para la implementación
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto SayHello y, a
continuación, haga clic en Establecer como proyecto de inicio en el menú contextual.
2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto InteropSolution y, a
continuación, haga clic en Dependencias del proyecto en el menú contextual.
3. En el cuadro de diálogo Dependencias del proyecto, seleccione SayHello en el cuadro Proyectos y, a continuación,
seleccione HelloCOMObject en el cuadro Depende de.
4. Haga clic en Aceptar.
La solución está lista para la implementación.
Implementar la solución combinada
Para implementar la solución
1. En el menú Depurar, haga clic en Iniciar sin depurar.
2. En el cuadro de diálogo Implementar, seleccione Pocket PC 2003 SE - Emulador y haga clic en Implementar.
Guarde este solución para utilizarla en Tutorial: Depurar una solución que incluye código administrado y código nativo.
Vea también
Conceptos
Interoperabilidad COM para dispositivos
Otros recursos
Tutoriales sobre dispositivos inteligentes
Desarrollo para Smart Device

Cómo: Crear un proyecto para múltiples plataformas de


dispositivo (Visual C++)
Puede establecer como destino varios dispositivos del mismo proyecto de desarrollo con C++ para dispositivos. Al utilizar
Visual Studio 2005, es posible que un proyecto de dispositivos tenga como destino varias plataformas de dispositivos, como
Pocket PC y Smartphone. Además, será posible agregar un proyecto de dispositivos a un proyecto de escritorio. Para obtener
más información, vea Compatibilidad con dispositivos para los proyectos de escritorio.
Existen dos maneras para poder establecer un proyecto de dispositivos como destino de varias plataformas:
1. Puede crear un proyecto utilizando el Asistente para proyectos para Smart Device. Ésta es la técnica más eficaz.
El Asistente para proyectos para Smart Device genera los archivos de proyecto para todas las plataformas de
dispositivos seleccionadas, como origen, encabezado y archivos de recursos. Puede instalar las nuevas plataformas
adicionales instalando el SDK de la plataforma o dispositivo.
Al utilizar Visual Studio 2005, será posible instalar cualquier SDK de dispositivos que admita Smartphone o Pocket PC
2003 (o superior), así como cualquier dispositivo de Windows CE versión 5.0 o superior. Para obtener más información,
vea Cómo: Crear un proyecto de dispositivos para múltiples plataformas.
2. Tras crear el proyecto en cuestión, utilice el panel Nueva plataforma del cuadro de diálogo Valores del Administrador
de configuración, Asistente para proyectos para Smart Device. Para obtener más información, vea Cómo: Agregar una
nueva plataforma a un proyecto de dispositivos.
Vea también
Tareas
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Utilizar recursos en varias plataformas
Otros recursos
Cómo mantener un Sencillo binario para Pocket PC y Smartphone
Desarrollo para Smart Device

Cómo: Crear un proyecto de dispositivos para múltiples


plataformas
Existen ventajas a la hora de utilizar el Asistente para aplicaciones para Smart Device con el fin de crear proyectos de
dispositivos multiplataforma al crear un proyecto, en lugar de agregar una plataforma después de que se haya creado el
proyecto. Estas entradas son:
Al seleccionar más de una plataforma en la página Plataformas del asistente para aplicaciones, se generará un archivo
de recursos y se configurará para cada una de las plataformas en cuestión. Sin embargo, si agrega una plataforma
después de crear el proyecto, necesitará agregar manualmente una plataforma y archivos de recursos. Para obtener más
información, vea Utilizar recursos en varias plataformas.
Al seleccionar más de una plataforma en la página Plataformas del asistente para aplicaciones, los archivos generados
tendrán una instrucción #if defined incrustada en el origen con el fin de adaptar el código multiplataforma. Sin
embargo, si agrega una plataforma después de la creación del proyecto, necesitará agregar manualmente la instrucción
#if defined a las secciones adecuadas del código.

Los siguientes procedimientos muestran cómo utilizar cada una de estas técnicas. Para obtener más información, vea
Explicación de código: Código generado por el asistente en proyectos de dispositivos de Visual C++.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Crear un proyecto de dispositivos multiplataforma usando el Asistente para proyecto nuevo


1. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.
Aparecerá el cuadro de diálogo Nuevo proyecto.
2. En Tipos de proyecto, expanda el nodo de Visual C++, haga clic en Smart Device y, a continuación, en Aplicación de
Smart Device MFC o cualquier otro de los tipos que se encuentren disponibles.
3. En el cuadro Nombre, escriba MultiPlatformProject.
4. En el cuadro Ubicación, compruebe dónde desea almacenar sus archivos de proyecto y, a continuación, haga clic en
Aceptar.
Aparecerá el Asistente para aplicaciones de Smart Device <Tipo de proyecto>.
5. Haga clic en Siguiente y, a continuación, en el panel Plataformas, seleccione las plataformas que desee establecer
como destino, como Pocket PC 2003 y Smartphone 2003.
6. Haga clic en Finalizar.
Su proyecto se mostrará en Explorador de soluciones.
Para agregar una nueva configuración de dispositivos mediante el Administrador de configuración
1. En el menú Generar de Visual Studio, haga clic en Administrador de configuración.
Aparece el cuadro de diálogo Administrador de configuración.
2. En la lista desplegable Configuración de soluciones activas, seleccione Nueva para agregar una nueva configuración.
Aparecerá el cuadro de diálogo Nueva configuración de la solución.
3. En el cuadro Nombre, escriba un nombre para la nueva configuración.
4. En el cuadro Copiar configuración de, especifique una configuración existente.
5. Haga clic en Aceptar.
Vea también
Tareas
Cómo: Agregar una nueva plataforma a un proyecto de dispositivos
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Utilizar recursos en varias plataformas
Otros recursos
Cómo mantener un Sencillo binario para Pocket PC y Smartphone
Desarrollo para Smart Device

Cómo: Agregar una nueva plataforma a un proyecto de


dispositivos
Los procedimientos siguientes muestran cómo agregar una plataforma a un proyecto de dispositivos existente.
Es una alternativa a crear un proyecto para varias plataformas desde el principio utilizando el asistente. El uso del asistente es
un modo superior. Para obtener más información, vea Cómo: Crear un proyecto de dispositivos para múltiples plataformas.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para agregar una nueva plataforma mediante el Administrador de configuración


1. En el menú Generar del proyecto de dispositivo, haga clic en Administrador de configuración.
Aparecerá el Administrador de configuración (Cuadro de diálogo).
2. En la lista desplegable Plataforma de soluciones activas, seleccione Nueva para agregar una nueva configuración.
Aparece el cuadro de diálogo Nueva plataforma de solución.
3. En Nombre, seleccione o escriba la plataforma que desea a agregar, por ejemplo, Smartphone 2003. .
4. En la lista desplegable Copiar configuración de, seleccione una plataforma existente para copiar la configuración de la
nueva plataforma o crear una nueva plataforma con la configuración vacía. En el caso último, tendrá que configurar el
proyecto manualmente.
5. Asegúrese de que la casilla de verificación Crear nuevas plataformas de proyecto está seleccionada.
De lo contrario, tendrá que administrar y agregar los archivos de configuración, todo el código dependiente de la
plataforma que el asistente pueda generar automáticamente y otros archivos de proyecto, como los recursos.
6. Haga clic en Aceptar.
El cuadro de diálogo Nueva plataforma de solución genera los archivos de proyecto para las plataformas
recientemente agregadas, como origen, encabezado y archivos de recursos.
7. Haga clic en Aceptar para cerrar el cuadro de diálogo Administrador de configuración.
Nota
Habiendo creado un proyecto de dispositivos, siempre puede agregar más plataformas después de la creación inicial.
No obstante, al agregar una nueva plataforma al proyecto después de la creación inicial, no se agregan los demás archi
vos DLL dependientes en tiempo de ejecución a la propiedad de configuración Archivos adicionales. Por ejemplo, si l
a aplicación se vincula dinámicamente a MFC, tendrá que agregar los siguientes archivos DLL a la propiedad Archivos
adicionales de la plataforma recién agregada: Mfc80u.dll, Atl80.dll, Msvcr80.dll. Este ejemplo está pensado para
una configuración comercial.

Vea también
Tareas
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Utilizar recursos en varias plataformas
Desarrollo para Smart Device

Tutorial: Crear una aplicación MFC multiplataforma para Smart


Devices
Es posible utilizar Visual C++ para escribir código destinado a varios dispositivos. El siguiente tutorial muestra cómo generar
una aplicación MFC multiplataforma. Para obtener más información, vea Asistente para aplicaciones de Smart Device MFC.
Crear un proyecto MFC multiplataforma
Este tutorial conlleva tres tareas principales:
Crear un proyecto MFC de Smart Device multiplataforma.
Agregar código al método OnDraw() multiplataforma.
Implementar la solución multiplataforma.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.
Este tutorial se ha escrito usando la configuración de desarrollo de Visual C++.

Para crear un proyecto MFC de Smart Device multiplataforma


1. En el menú Archivo, elija Nuevo, haga clic en Proyecto, expanda el nodo de Visual C++ en el panel Tipos de proyecto
y, a continuación, haga clic en Smart Device.
2. En el panel Plantillas, haga clic en Aplicación de Smart Device MFC.
3. En el cuadro Nombre, escriba HelloMFC.
4. Haga clic en Aceptar para iniciar el Asistente para aplicaciones de Smart Device MFC.
5. Haga clic en Siguiente para seleccionar los SDK de plataforma que se van a agregar al proyecto actual.
6. En el panel SDK instalados, seleccione las plataformas que desea agregar al proyecto actual, como Smartphone 2003 y
Pocket PC 2003.
7. Haga clic en Siguiente para abrir la página Tipo de aplicación.
8. Active las casillas de verificación Documento único y Utilizar MFC en una biblioteca estática. Deje activada la casilla
de verificación Compatibilidad con la arquitectura documento/vista.
9. Haga clic en Finalizar para finalizar y cerrar el asistente o haga clic en Siguiente para aceptar los valores
predeterminados para todas las opciones restantes en el asistente.
Nota
Tras haber creado un proyecto de dispositivo, siempre se pueden agregar más plataformas; sin embargo, el hecho de agrega
r una nueva plataforma al proyecto tras la creación inicial no agrega los archivos DLL en tiempo de ejecución adicionales y d
ependientes a la propiedad de configuración Archivos adicionales para la plataforma agregada. Por ejemplo, si una determ
inada aplicación se vincula dinámicamente a MFC, el usuario necesitará agregar los siguientes archivos DLL a la propiedad A
rchivos adicionales para la configuración de nuevas aplicaciones agregadas: Mfc80u.dll, Atl80.dll, Msvcr80.dll. Este ejempl
o está pensado para una configuración de versión comercial.

Agregar código al método OnDraw () multiplataforma


Para agregar código al método OnDraw ()
1. En el Explorador de soluciones, expanda el nodo Archivos de código fuente. Haga doble clic en HelloMFCView.cpp
para abrir el archivo de código fuente en el editor.
2. Modifique la firma OnDraw para quitar los comentarios pDC del métodoOnDraw(CDC* pDC) . En la línea resultante debería
leerse:

void CHelloMFCView::OnDraw(CDC* pDC)

3. Inserte el siguiente código a continuación del comentario //TODO en el método OnDraw:

// Define a rectangle to draw on the screen.


CRect rect;
// Use the client area of the MFC form for drawing.
GetClientRect(&rect);
// Draw the text on the screen.
pDC->DrawTextW(_T("Hello World"),11, &rect,1);

4. En el menú Generar, haga clic en Volver a generar solución.


Seleccionar un dispositivo de destino
Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General.
Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte inferior del
cuadro de diálogo Opciones.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Implementar la solución MFC multiplataforma
Para implementar la solución
1. En la lista desplegable Dispositivo de destino de la barra de herramientas de Visual Studio, seleccione un destino, por
ejemplo, Pocket PC 2003 SE - Emulador o Pocket PC 2003 - Dispositivo.
2. En el menú Generar, haga clic en Implementar.
Para obtener más información sobre el código generado para este tutorial, vea Explicación de código: Hello World: Aplicación
MFC multiplataforma para Smart Devices.
Vea también
Otros recursos
Tutoriales sobre dispositivos inteligentes
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Desarrollo para Smart Device

Explicación de código: Hello World: Aplicación MFC


multiplataforma para Smart Devices
Tanto si se utiliza Visual Studio C++ para establecer como destino Windows CE (Mobile) como otros conocidos dispositivos
móviles, o eMbedded Visual C++, para desarrollar aplicaciones de dispositivos, se observará que el asistente de la aplicación
MFC multiplataforma de C++ para Smart Devices simplifica la mayoría de las tareas más comunes relacionadas con la
generación de archivos de proyecto. Algunos de los archivos incluyen archivos de recursos y archivos de configuración de
proyectos multiplataforma. El asistente también introduce el código del jumpstart, de tal manera que es posible centrarse en
desarrollar funciones fundamentales de aplicación empresarial.
Este tutorial ayuda a familiarizarse con el código generado automáticamente mediante el asistente de la aplicación MFC
multiplataforma para Smart Devices, de tal forma que es posible extender y modificar fácilmente la aplicación para satisfacer
las necesidades del usuario.
Para obtener más información, vea Tutorial: Crear una aplicación MFC multiplataforma para Smart Devices, Referencia a MFC
para dispositivos y MFC Reference.
Lista de código para una aplicación MFC multiplataforma de los dispositivos inteligentes de C++
El código generado del asistente incluye lo siguiente:
Sección include.

#include "stdafx.h"

stdafx.h. Para obtener más información, vea Archivos de encabezado precompilados.

#include "MFCHello1.h"
#include "MFCHello1Doc.h"
#include "MFCHello1View.h"

// Configuración Debug.

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

IMPLEMENT_DYNCREATE(CMFCHello1View, CView)

Mapas de mensajes de MFC y, más específicamente, BEGIN_MESSAGE_MAP.


IMPLEMENT_DYNCREATE, vea IMPLEMENT_DYNCREATE.

BEGIN_MESSAGE_MAP(CMFCHello1View, CView)
END_MESSAGE_MAP()

Código de construcción. Para obtener más información, vea Diseño de constructores y para el control de excepciones,
vea Controlar excepciones.

// CMFCHello1View construction/destruction
CMFCHello1View::CMFCHello1View()
{
// TODO: add construction code here.
}
CMFCHello1View::~CMFCHello1View()
{
}

MFC PreCreateWindow.

BOOL CMFCHello1View::PreCreateWindow(CREATESTRUCT& cs)


{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs.

return CView::PreCreateWindow(cs);
}

Conviene recordar que dibujar o pintar en la pantalla es algo que tiene lugar en el método CView::OnDraw. En este
método es posible controlar la interfaz de dispositivos gráficos (GDI), principalmente en el código (CDC* pDC), que se
proporciona como parámetro. No hay que olvidar quitar los comentarios. Por ejemplo, es posible utilizar toda la potencia
de la GDI para cualquier cosa relacionada con el texto para dibujar gráficos en juegos animados de una determinada
aplicación. En este ejemplo de GDI, CDC::DrawTextCDC::El método DrawText se utiliza a continuación para dibujar el texto
de "Hola a todos" dentro del rectángulo definido por CWnd::GetClientRect.
BEGIN_MESSAGE_MAP.
Clase CDC.
GetClientRect.

// CMFCHello1View drawing
void CMFCHello1View::OnDraw(CDC* pDC)
{
CMFCHello1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// TODO: add draw code for native data here.


CRect rect;
GetClientRect(&rect);
// Length and string to draw are hard coded for simplicity of
// example.

DrawText y otros métodos relacionados. Para obtener más información, vea CDC Class.

pDC->DrawTextW(_T("Hello World"),11, &rect,1);


// nCount ( set to 11) can be a –1, then
//lpszString is assumed to be
// a long pointer to a null-terminated string
// and DrawText method automatically
// computes the character count.
}
// CMFCHello1View diagnostics
#ifdef _DEBUG
void CMFCHello1View::AssertValid() const
{
CView::AssertValid();
}
#ifndef _WIN32_WCE
void CMFCHello1View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif // !_WIN32_WCE
CMFCHello1Doc* CMFCHello1View::GetDocument() const
// non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCHello1Doc)));
return (CMFCHello1Doc*)m_pDocument;
}
#endif //_DEBUG
// CMFCHello1View message handlers

Información disponible en el archivo Léame creado por el asistente


El Asistente para aplicaciones ha creado esta aplicación MFCHello1 para el usuario. Esta aplicación no sólo muestra los
fundamentos sobre cómo utilizar Microsoft Foundation Classes sino que también es un punto de partida a la hora de diseñar
una determinada aplicación de controles ActiveX.
Los archivos generados aparecen enumerados aquí, junto con un resumen de lo que puede encontrarse en cada archivo. Estos
archivos constituyen de forma colectiva el jumpstart que señalará al desarrollo de aplicaciones MFC.
El nombre HelloMFC se utiliza para un ejemplo. Puede que desee utilizar el nombre de un proyecto determinado.
HelloMFC.vcproj
Archivo de proyectos principal para proyectos de VC++ generados mediante un asistente para aplicaciones. Contiene
información acerca de la versión de Visual C++ con la que se generó el archivo, así como información acerca de las
plataformas, configuraciones y características del proyecto seleccionadas en el asistente para aplicaciones.
HelloMFC.h
Archivo de encabezado principal de la aplicación. Incluye otros encabezados específicos del proyecto y declara la clase de
aplicación CMFCHello1App.
HelloMFC.cpp
Archivo principal de código fuente de la aplicación que contiene la definición de clase para CMFCHello1App de la clase de
aplicación.
HelloMFCppc.rc
Listado de archivos de recursos principal del proyecto donde aparecen todos los recursos de Microsoft Windows que utiliza el
proyecto a la hora de realizar una compilación para la Pocket PC platform o una plataforma que admite el mismo modelo de
interfaz de usuario. Incluye los iconos, mapas de bits y cursores almacenados en el subdirectorio RES. Este archivo se puede
modificar directamente en Microsoft Visual C++. Los recursos de proyecto se encuentran en 1033. Al almacenar el archivo .rc,
las definiciones de la sección de datos se almacenan como la versión hexadecimal del valor numérico para el que se las ha
definido y no como el nombre descriptivo de las definiciones.
res\HelloMFCppc.rc 2
Archivo que contiene recursos no modificados mediante Microsoft Visual C++. Debería colocar todos los recursos no
modificables por el editor de recursos en este archivo.
HelloMFCsp.rc
Listado de archivos de recursos principal del proyecto donde aparecen todos los recursos de Microsoft Windows que utiliza el
proyecto a la hora de realizar una compilación para la Smartphone platform o una plataforma que admite el mismo modelo de
interfaz de usuario. Incluye los iconos, mapas de bits y cursores almacenados en el subdirectorio RES. Este archivo se puede
modificar directamente en Microsoft Visual C++. Los recursos de proyecto se encuentran en 1033. Al almacenar el archivo .rc,
las definiciones de la sección de datos se almacenan como la versión hexadecimal del valor numérico para el que se las ha
definido y no como el nombre descriptivo de las definiciones.
res\HelloMFCsp.rc 2
Archivo que contiene recursos no modificados mediante Microsoft Visual C++. Debería colocar todos los recursos no
modificables por el editor de recursos en este archivo.
res\HelloMFC.ico
Archivo de icono, utilizado como el icono de la aplicación. Este icono se incluye en el archivo de recursos principal.
MainFrm.h, MainFrm.cpp
Archivos que contienen CMainFrame de la clase marco, que se deriva de CFrameWnd y que controla todas las características
marco SDI.
El Asistente para aplicaciones también crea un tipo de documento MFC y una vista MFC:
HelloMFCDoc.h, HelloMFCDoc.cpp
Archivos que contienen la clase HelloMFCDoc. Modifique estos archivos para agregar datos de documentos especiales y
para implementar la carga y guardado de archivos (utilizando CMFCHello1Doc::Serialize).
HelloMFCView.h, HelloMFCView.cpp
Archivos que contienen la clase HelloMFCView. Los objetos HelloMFCView se utilizan para ver objetos HelloMFCDoc.
StdAfx.h, StdAfx.cpp
Archivos utilizados para generar un archivo de encabezado precompilado (PCH) denominado HelloMFC.pch y un archivo de
tipos precompilado denominado StdAfx.obj.
Resourceppc.h y Resourcesp.h
Archivo de encabezado estándar que define los nuevos identificadores de recursos. Microsoft Visual C++ lee y actualiza este
archivo.
El Asistente para aplicaciones utiliza TODO: para indicar qué partes del código fuente se deberían agregar o personalizar.
Si la aplicación utiliza MFC en una DLL compartida y dicha aplicación está diseñada en un lenguaje diferente con respecto al
lenguaje actual del sistema operativo, puede que desee copiar el correspondiente archivo MFC80XXX.DLL de recursos
adaptados en el directorio de la aplicación. En este nombre, "XXX" corresponde a la abreviatura del lenguaje. Por ejemplo,
MFC80DEU.DLL contiene recursos traducidos a alemán. De no ser así, algunos elementos de la interfaz de usuario
permanecerán en el lenguaje del sistema operativo.
Vea también
Otros recursos
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Desarrollo para Smart Device

Tutorial: Crear un control ActiveX MFC multiplataforma para


Smart Devices
Es posible utilizar Visual C++ con el fin de crear código para controles ActiveX MFC destinado a varios dispositivos. Este
tutorial muestra cómo generar un control ActiveX multiplataforma en C++ para su uso con varios dispositivos.
Crear un proyecto de control ActiveX MFC multiplataforma
Este tutorial consta de tres tareas principales:
Crear un proyecto de control ActiveX MFC de Smart Device multiplataforma.
Agregar código al método OnDraw() de control ActiveX MFC.
Implementar la solución de control ActiveX MFC multiplataforma para realizar pruebas.
Para obtener más información, vea Asistente para controles ActiveX de Smart Device MFC.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los val
ores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuracio
nes del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Este tutorial se ha escrito usando los valores de configuración de desarrollo de Visual C++.
Crear un proyecto de control ActiveX MFC multiplataforma de Smart Device
1. En el menú Archivo, elija Nuevo, haga clic en Proyecto, expanda el nodo Visual C++ en el panel Tipos de proyecto y,
a continuación, haga clic en Smart Device.
2. En el panel Plantillas, haga clic en Control ActiveX de Smart Device MFC.
3. En el cuadro Nombre, escriba MFCAX.
4. En el cuadro Solución, acepte la opción predeterminada Crear directorio para la solución.
5. Haga clic en Aceptar para iniciar el Asistente para controles ActiveX de Smart Device MFC.
6. Haga clic en Siguiente en la página de bienvenida del Asistente para aplicaciones de Smart Device MFC. Aparece
Plataformas, Asistente para controles ActiveX de Smart Device MFC y es posible seleccionar la plataforma o plataformas
que se va a agregar al proyecto actual.
En el panel SDK instalados, seleccione las plataformas que se desean tener como destino y agregue el proyecto actual,
como Smartphone 2003 y Pocket PC 2003. Para agregar una plataforma, seleccione la plataforma que aparece en el
panel izquierdo, como Smartphone 2003 y haga clic en el botón con la flecha derecha (>) sobre dicha plataforma. Para
quitar una plataforma, seleccione la plataforma que aparece en el panel derecho, como Pocket PC 2003 y haga clic en el
botón con la flecha izquierda (>) sobre dicha plataforma.
7. Haga clic en Finalizar para finalizar y cerrar el asistente o haga clic en Siguiente para aceptar los valores
predeterminados para todas las opciones restantes en el asistente.
Nota
Habiendo creado un proyecto de dispositivos, siempre puede agregar más plataformas después de la creación inicial. S
in embargo, el hecho de agregar una nueva plataforma a un proyecto existente no implica que se agreguen DLL depen
dientes en tiempo de diseño a la propiedad de configuración Archivos adicionales. Por ejemplo, si la aplicación se vin
cula dinámicamente a MFC, será necesario incluir los siguientes archivos DLL en la propiedad Archivos adicionales d
e la plataforma que se acaba de agregar: Mfc80u.dll, Atl80.dll, Msvcr80.dll. Este ejemplo incluye una configuración com
ercial.

8.
Agregar código al método OnDraw() del control MFC multiplataforma
Para agregar código al método OnDraw de un control ActiveX MFC
1. En Explorador de soluciones, expanda el nodo Archivos de código fuente y seleccione y abra el archivo de código
fuente MFCAXCtrl.cpp en el editor.
2. Reemplace el código del método OnDraw con el siguiente código, especialmente las tres últimas líneas:

void CMFCAXCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

CRect rect;
GetClientRect(&rect);
pdc->DrawTextW(_T("Hello World"),11, &rect,1);
}

3. En el menú Generar, haga clic en Volver a generar solución.


Implementar la solución multiplataforma
Para implementar la solución
1. Con el fin de ejecutar la solución implementada, en el dispositivo de destino, primero implemente y registre el proyecto
de control ActiveX.
2. En la lista desplegable Dispositivo de destino de la barra de herramientas de Visual Studio, seleccione un destino, por
ejemplo, Pocket PC 2003 SE - Emulador o Pocket PC 2003 - Dispositivo.
3. En el menú Generar, haga clic en Implementar.

Seleccionar un dispositivo de destino


Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante la implementación
1. En el menú Herramientas, haga clic en Opciones, haga clic Herramientas de dispositivo y, a continuación, en
General. Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte
inferior del cuadro de diálogo Opciones.
2. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo.
Para obtener más información, visite el Mobile Developer Center.
Vea también
Otros recursos
Tutoriales sobre dispositivos inteligentes
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Desarrollo para Smart Device

Explicación de código: Hello World: Control ActiveX


multiplataforma para Smart Devices
ActiveX MFC de C++ para el asistente de Smart Devices libera al usuario de la mayoría de las tareas más comunes
relacionadas con la generación de controles ActiveX MFC multiplataforma para proyectos de Smart Devices como archivos de
recursos y archivos de configuración de proyectos multiplataforma. El asistente genera los archivos básicos.
Este tutorial ayuda a familiarizarse con el código generado automáticamente al utilizar controles ActiveX MFC multiplataforma
para el asistente de Smart Devices de tal forma que es posible extender y modificar fácilmente la aplicación para satisfacer las
necesidades del usuario.
Tutorial de código
Cualquier persona familiarizada con la programación de controles ActiveX MFC o con la programación de ActiveX en general,
puede marcar fácilmente las principales funciones generadas por el asistente. El código del asistente contiene lo siguiente:
Una selección de include:

#include "stdafx.h"

stdafx.h. Para obtener más información, vea Archivos de encabezado precompilados.

#include "stdafx.h"
#include "<PROJECTNAME>.h"
#include "MFCAXCtrl.h"
#include "MFCAX1PropPage.h"

Configuración Debug:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

IMPLEMENT_DYNCREATE. Para obtener más información, vea IMPLEMENT_DYNCREATE.


Mapas de mensajes MFC. Para obtener más información, vea BEGIN_MESSAGE_MAP.

// Message map

BEGIN_MESSAGE_MAP(CMFCAXCtrl, COleControl)
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
END_MESSAGE_MAP()

Mapas de envío MFC. Para obtener más información, vea BEGIN_DISPATCH_MAP.

// Dispatch map
BEGIN_DISPATCH_MAP(CMFCAXCtrl, COleControl)
#ifndef WIN32_PLATFORM_WFSP
DISP_FUNCTION_ID(CMFCAXCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VT
S_NONE)
#endif // !WIN32_PLATFORM_WFSP
END_DISPATCH_MAP()
Mapas de eventos MFC. Para obtener más información, vea BEGIN_EVENT_MAP.

// Event map

BEGIN_EVENT_MAP(CMFCAXCtrl, COleControl)
END_EVENT_MAP()

STDMETHODIMP CMFCAXCtrl::XObjectSafety::SetInterfaceSafetyOptions(REFIID riid, DWORD dwOpti


onSetMask, DWORD dwEnabledOptions)
{
// Return S_OK if modified, and S_FALSE otherwise.
METHOD_PROLOGUE_EX_(CMFCAXCtrl, ObjectSafety)

// Check if we support the interface and


// return E_NOINTEFACE if we don't.
IUnknown* pUnk;
if (FAILED(this->QueryInterface(riid, (void**)&pUnk)))
return E_NOINTERFACE;

// If we are asked to set options we don't support then fail


if (dwOptionSetMask & ~pThis->m_dwSupportedSafety)
return E_FAIL;

// Set the safety options we have been asked to.


pThis->m_dwCurrentSafety = (pThis->m_dwCurrentSafety & ~dwOptionSetMask) | (dwOp
tionSetMask & dwEnabledOptions);
return S_OK;
}
#endif //defined(_WIN32_WCE) && (_WIN32_WCE < 0x500)

Información disponible en el archivo Léame creado por el asistente


El asistente de la aplicación ha creado esta aplicación jumpstart para el usuario. Esta aplicación no sólo muestra los
fundamentos sobre cómo utilizar Microsoft Foundation Classes sino también un punto de partida a la hora de diseñar una
determinada aplicación de controles ActiveX.
Los archivos generados aparecen enumerados aquí, junto con un resumen de lo que puede encontrarse en cada archivo. Estos
archivos constituyen en conjunto el punto de partida de su desarrollo de ActiveX MFC.
El nombre de MFCAX1 se utiliza como ejemplo. Es posible que el usuario desee utilizar su propio nombre para el nombre del
proyecto.
MFCAXDLL.vcproj
El asistente ha creado este proyecto para la DLL de controles ActiveX MFCAX1, que contiene un control.
MFCAX1.vcproj
Principal archivo de proyectos para proyectos VC++ generados mediante un asistente para aplicaciones. Contiene información
acerca de la versión de Visual C++ con la que se generó el archivo, así como información acerca de las plataformas,
configuraciones y características del proyecto seleccionadas en el Asistente para aplicaciones.
MFCAX1.h
La principal incluye un archivo para la DLL de controles ActiveX. Incluye otros archivos para proyectos específicos.
MFCAX1.cpp
Archivo de código fuente que contiene código para la inicialización, finalización y almacenamiento de DLL.
MFCAX1ppc.rc
Listado de todos los recursos de Microsoft Windows que utiliza el proyecto a la hora de realizar una compilación para la
plataforma Pocket PC o una plataforma que admite el mismo modelo de interfaz de usuario. Al almacenar el archivo .rc, las
instancias de #defines en la sección de datos se almacenan como la versión hexadecimal del valor numérico para el que se les
ha definido y no como el nombre descriptivo de las definiciones.
MFCAX1sp.rc
Listado de todos los recursos de Microsoft Windows que utiliza el proyecto a la hora de realizar una compilación para la
plataforma Smartphone o una plataforma que admite el mismo modelo de interfaz de usuario. Al almacenar el archivo .rc, las
instancias de #defines en la sección de datos se almacenan como la versión hexadecimal del valor numérico para el que se les
ha definido y no como el nombre descriptivo de las definiciones.
MFCAX1.rc2
Archivo que contiene recursos no modificados mediante Microsoft Visual C++. Debería colocar todos los recursos no
modificables por el editor de recursos en este archivo.
MFCAX1.def
Archivo que contiene información sobre la DLL de controles ActiveX que se debe proporcionar para ejecutar con Microsoft
Windows.
MFCAX1.idl
Archivo que contiene el código fuente del Lenguaje de descripción de objetos para la biblioteca de tipos del control en
cuestión.
Archivos de control de C MFCAX1Ctrl:
MFCAX1Ctrl.h: Archivo que contiene la declaración de la clase C<PROJECTNAME>Ctrl de C++.
MFCAX1Ctrl.cpp: Archivo que contiene la implementación de la clase C MFCAX1Ctrl de C++.
MFCAX1PropPage.h: Archivo que contiene la declaración de la clase C MFCAX1PropPage de C++.
MFCAX1PropPage.cpp: Archivo que contiene la implementación de la clase C MFCAX1PropPage de C++.
CMFCAX1Ctrl.bmp: Archivo que contiene un mapa de bits que un contenedor utilizará para representar el control
CMFCAX1Ctrl cuando aparezca en una paleta de herramientas. El principal archivo (.rc) de recursos es el que incluye este
mapa de bits.
Otros archivos estándar:
stdafx.h, stdafx.cpp: Archivos utilizados para generar un archivo de encabezado precompilado (PCH) denominado
MFCAX1.pch y un archivo de tipos precompilado (PCT) stdafx.obj.
resourceppc.h: Archivo de encabezado estándar que define los nuevos identificadores de recursos. El editor de recursos
de Visual C++ lee y actualiza este archivo.
resourcesp.h: Archivo de encabezado estándar que define los nuevos identificadores de recursos. El editor de recursos
de Visual C++ lee y actualiza este archivo. El Asistente para controles utiliza TODO para indicar qué partes del código
fuente se deberían agregar o personalizar.

Vea también
Otros recursos
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Desarrollo para Smart Device

Tutorial: Crear un control ActiveX ATL multiplataforma para


Smart Devices
Es posible utilizar Visual C++ para dispositivos con el fin de diseñar controles ActiveX cuyo destino puedan ser varios
dispositivos. El siguiente tutorial describe cómo generar un control ActiveX ATL multiplataforma.
En este tutorial, es posible realizar las siguientes tareas principales:
Crear un proyecto ATL para Smart Device multiplataforma.
Agregue un control ActiveX al proyecto utilizando el asistente. Observe que el asistente generara la mayor parte de la
estructura básica y del código.
Modifique el código en los archivos stdafx.h y samplecontrol.h para definir el modelo de subprocesamiento y evitar
advertencias del compilador.
Implementar la solución multiplataforma. Observe que el archivo de Internet Explorer también se genera para facilitar la
comprobación y ejecución del control.
Este tutorial se ha escrito usando la configuración de desarrollo de Visual C++.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de la configu
ración activa o la edición. Para cambiar la configuración, elija la opción Importar y exportar configuraciones en el menú H
erramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Crear un control ActiveX ATL multiplataforma


Para crear un control ActiveX ATL multiplataforma
1. En el menú Archivo, elija Nuevo, haga clic en Proyecto, expanda el nodo de Visual C++ en el panel Tipos de proyecto
y, a continuación, haga clic en Smart Device.
2. En el panel Plantillas, haga clic en Proyecto ATL de Smart Device.
3. En el cuadro Nombre, escriba ATLAXControl y, a continuación, haga clic en Aceptar.
Se inicia el Asistente para proyectos ATL de Smart Device.
4. Haga clic en Siguiente en la página de bienvenida del Asistente para proyectos ATL de Smart Device de bienvenida.
Aparece Plataformas, Asistente para proyectos ATL de Smart Device, por lo que puede seleccionar los SDK de la
plataforma para va a agregar al proyecto actual.
5. En la lista SDK instalados, seleccione las plataformas que desea agregar al proyecto actual, como Smartphone 2003 y
Pocket PC 2003. Para agregar una plataforma, seleccione la plataforma que aparece en el panel izquierdo, como
Smartphone 2003 y haga clic en el botón con la flecha derecha (>) sobre dicha plataforma. Para quitar una plataforma,
seleccione la plataforma que aparece en el panel derecho, como Pocket PC 2003 y haga clic en el botón con la flecha
izquierda (<) sobre dicha plataforma.
6. Haga clic en Finalizar para terminar y cerrar el asistente.
Agregar un control ActiveX al proyecto
Para agregar un control ActiveX al proyecto
1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en ATLAXControl, elija Agregar y, a
continuación, haga clic en Clase.
2. En el panel Categorías, haga clic en Smart Device.
3. En el panel Plantillas, haga clic en Control ATL y, a continuación, en Agregar.
Aparece el cuadro de diálogo Asistente para controles ATL.
4. En el cuadro de texto Nombre corto, escriba samplecontrol.
5. Haga clic en Finalizar para terminar y cerrar el asistente.
Modificar el código en archivos de encabezado
Para modificar el código en stdafx.h
1. En el Explorador de soluciones, haga doble clic en stdafx.h para abrirlo en el editor.
2. Agregue #define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA de definición siguiente después de #pragma once, tal y
como se muestra aquí:

// Add this define after


#pragma once
#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA

3. Agregue un control ActiveX al proyecto tal y como se describe en el siguiente procedimiento.


Para agregar un control ActiveX para el proyecto
1. En el Explorador de soluciones, haga doble clic en samplecontrol.h para abrirlo en el editor.
2. Reemplace la cadena ATL 8.0 : samplecontrol con Hello World ActiveX Control en el código que define
Isamplecontrol.

Nota
Los controles ActiveX para una plataforma DCOM se deberían marcar como modelo apartamento subprocesado al generars
e. Ésta es la configuración predeterminada del asistente del control ALT. Puede omitir, sin ningún tipo de problema, la advert
encia generada durante la compilación. Los proyectos ATL, GUI y EXE, al igual que ocurre con aquellos a los que se ha agrega
do atlwin.h, atlctl.h o atlhost.h a un proyecto ATL EXE, deberían tener _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA definido
en stdafx.h antes de incluir los archivos de encabezado ATL. Esta práctica es la misma que se realiza cuando se está desarrolla
ndo para el escritorio. Para obtener más información, vea Generar y depurar proyectos de dispositivos de Visual C++.

Implementar la solución ATL multiplataforma


Para implementar la solución
1. En el menú Generar, haga clic en Volver a generar solución para generar el control.
2. En el menú Generar, haga clic en Implementar solución.
3. En la lista desplegable Dispositivo de destino de la barra de herramientas de Visual Studio, seleccione un destino, por
ejemplo, Pocket PC 2003 SE - Emulador o Pocket PC 2003 - Dispositivo.
4. En el menú Generar, haga clic en Implementar.
Seleccionar un dispositivo de destino
Lleve a cabo el procedimiento siguiente para asegurarse de que se le pedirá seleccionar un dispositivo cuando implemente la
solución.
Para solicitar opciones de dispositivos durante su implementación
1. En el menú Herramientas, haga clic en Opciones, expanda el nodo Herramientas de dispositivo y, a continuación,
haga clic en General.
2. Si Herramientas de dispositivo no está visible, seleccione Mostrar todas las configuraciones en la parte inferior del
cuadro de diálogo Opciones.
3. Active la casilla de verificación Mostrar dispositivos antes de implementar un proyecto de dispositivo y, a
continuación, haga clic en Aceptar.
Para ejecutar el control, utilice Explorador de archivos en el dispositivo, desplácese hasta Archivos de
programa\ATLAXControl y haga doble clic en el archivo ATLAXControl de Internet Explorer. Aparecerán uno o varios
mensajes de seguridad. Haga clic en Sí para ejecutar la página.
Vea también
Otros recursos
Tutoriales sobre dispositivos inteligentes
Cómo: Crear un proyecto para múltiples plataformas de dispositivo (Visual C++)
Desarrollo para Smart Device

Cómo: Alojar un control ActiveX en un recurso de cuadro de


diálogo
Cuando utilice Visual Studio 2005 para diseñar controles ActiveX para dispositivos, debe realizar algunos pasos adicionales.
Puesto que el Editor de recursos utiliza el control que se registra en el equipo de escritorio para manipularlo en tiempo de
diseño, y como no es posible registrar controles de dispositivos en el equipo de escritorio, los pasos siguientes proporcionan
una experiencia de diseño alternativa. En los procedimientos siguientes se asume que ya dispone de un proyecto de controles
ActiveX y un proyecto host, y que va incluir controles ActiveX en un cuadro de diálogo.
Nota
Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los
valores de configuración o de edición activos. Para cambiar la configuración, elija Importar y exportar configuraciones en
el menú Herramientas. Para obtener más información, consulte Valores de configuración de Visual Studio.

Para agregar controles ActiveX mediante el editor de cuadros de diálogo


1. En el editor de cuadros de diálogo, abra el cuadro de diálogo del proyecto host.
2. Desde el Cuadro de herramientas, arrastre un control personalizado hasta el cuadro de diálogo.
3. Coloque y adapte el control personalizado en el cuadro de diálogo del modo en el que desea que aparezca el control
ActiveX.
4. Haga clic con el botón secundario del mouse en el control personalizado y, a continuación, haga clic en Propiedades.
5. En la propiedad Class, pegue el GUID del control ActiveX. No olvide incluir las llaves "{....}".
6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el archivo Nombre de proyecto.RC2 y,
a continuación, haga clic en Ver código.
7. En la sección Agregar aquí los recursos editados manualmente, agregue el código siguiente. El control personalizado
requiere una sección de inicialización de diálogo para que se muestre correctamente. El contenido de la sección de
inicialización de diálogo real no se utiliza. No olvide reemplazar <nombre del proyecto> por el nombre de su proyecto.

IDD_<project name>_DIALOG DLGINIT BEGIN IDC_CUSTOM1, 0x376, 22, 0 0x0000, 0x0000, 0x08
00, 0x0000, 0x094d, 0x0000, 0x043d, 0x0000, 0x0013, 0xcdcd, 0xcdcd, 0

8. Genere y ejecute el proyecto host. Recuerde implementar y registrar el control ActiveX en el dispositivo de destino.
Para utilizar un método alternativo para alojar controles ActiveX
1. Registre la clase de ventana AtlAxWin80 llamando a AtlAxWinInit en algún punto de la aplicación. Las aplicaciones ATL
realizan esta operación en el código de inicialización del módulo. Las aplicaciones Win32 deben llamar a esta función en
la función WinMain. Para las aplicaciones MFC, siga estos pasos:
a. Haga clic con el botón secundario del mouse en el Explorador de soluciones y, a continuación, haga clic en
Agregar y en Clase.
b. Haga clic en Agregar compatibilidad de ATL a MFC (bajo el título Dispositivo inteligente).
c. Agregue la llamada AtlAxWinInit al principio del método InitInstance de la clase de aplicación host.
2. En un recurso de cuadro de diálogo (como un cuadro de diálogo o control compuesto de ATL, o un cuadro de diálogo de
MFC):
a. Arrastre un control personalizado desde el Cuadro de herramientas.
b. Establezca la propiedad de clase de ventana en AtlAxWin80.
c. Establezca el título en el GUID entre llaves o en el Id. de programa.
3. Para MFC, agregue atl.lib como entrada de vínculo adicional.
4. Para MFC, agregue estas líneas a la opción Implementación | Archivos adicionales. Estas líneas ya están incluidas
para las bibliotecas de vínculos dinámicos, pero deben agregarse para las bibliotecas de MFC vinculadas estáticamente.

msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\$(ProjectName)|0
atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\$(ProjectName)|0
msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\$(ProjectName)|0

Vea también
Otros recursos
Programar para dispositivos con Visual C++
Tutoriales sobre dispositivos inteligentes
Desarrollo para Smart Device

Ejemplos de dispositivos inteligentes


Puede encontrar varios ejemplos de dispositivos en línea en el Mobile Developer Center.
El siguiente ejemplo de Visual C# muestra características de .NET Compact Framework. Los ejemplos nativos utilizan Visual
C++ para ejemplificar escenarios de aplicaciones de dispositivos comunes.
En esta sección
Creating a Custom Control (Visual C#)
Proporciona un control personalizado ListView de dos líneas que incluye el tiempo de diseño WYSIWYG.
Se basa en .NET Compact Framework versión 2.0.
CompactNav (Visual C#)
Proporciona un explorador del sistema de archivos de Smartphone que dispone de técnicas como la llamada a API no
administradas.
Se basa en .NET Compact Framework versión 1.0.
Ejemplos nativos (Dispositivos)
Proporciona vínculos para tres aplicaciones nativas de ejemplo en el sitio del centro para desarrolladores de Mobile (Mobile
Developer Center).
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Ejemplos y tutoriales (Proyectos de dispositivos inteligentes)
Desarrollo para Smart Device

Creating a Custom Control (Visual C#)


Download sample
Este ejemplo de Visual C# muestra cómo crear un control personalizado ListView de dos líneas, incluyendo una experiencia en
tiempo de diseño WYSIWYG.
Es posible generar este ejemplo para Pocket PC o Smartphone, utilizando la versión 1,0 o la versión 2.0 de .NET Compact
Framework.
Nota de seguridad
Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que qui
zás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales
o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para ejecutar este ejemplo


1. Haga clic en Descargar ejemplo.
Aparece el cuadro de mensaje Descarga de archivos.
2. Haga clic en Abrir y, en la columna izquierda de la ventana de carpeta ZIP, haga clic en Extraer todos los archivos.
Se abre el Asistente para extracción.
3. Haga clic en Siguiente. Puede cambiar el directorio donde se extraerán los archivos y, a continuación, haga clic de nuevo
en Siguiente.
Asegúrese de activar la casilla de verificación Mostrar archivos extraídos y, a continuación, haga clic en Finalizar.
4. Haga doble clic en el archivo .sln del ejemplo.
La solución de ejemplo se muestra en el Explorador de soluciones. Podría obtener una advertencia de seguridad que
indica que la ubicación de la solución no es de confianza. Haga clic en Aceptar para continuar.

Lo que muestra el ejemplo


Este ejemplo muestra cómo implementar un control TwoLineListBox personalizado utilizando dibujo personalizado con plena
compatibilidad en tiempo de diseño, incluyendo las siguientes técnicas:
Aspecto de control pintado personalizado utilizando clases de los espacios de nombres System.Drawing y
System.Drawing.Imaging.
Control de eventos para volver a dibujar un control personalizado.
Utilizar enlace de datos para cargar datos de un origen de datos para rellenar el control.
Mostrar una imagen en un control personalizado.
Agregar compatibilidad en tiempo de diseño para la descripción, categoría y otras propiedades y eventos utilizando
Diagrama de clase y DesignTimeAttributes.
Agregar compatibilidad en tiempo de diseño para establecer enlaces entre un control y un origen de datos existente.
Aplicar DataSourceListEditor y DataMemberFieldEditor a propiedades (DataSource, Data) a través de
DesignTimeAttributes.
Aplicar editor personalizado (editor de contacto) a propiedad (Context) a través de DesignTimeAttributes.
Establecer un valor predeterminado para algunas propiedades, como Line1DisplayMember, Line2DisplayMember.
Serializar una propiedad de colección en código a partir del editor personalizado, editor de contacto.
Deserializar una propiedad de colección en un editor personalizado, editor de contacto, a partir de código.
Serializar una imagen a partir de un editor personalizado, editor de contacto, en un archivo .resx.
Deserializar una imagen a partir de un archivo .resx en el editor personalizado, editor de contacto.
Desarrollo para Smart Device

CompactNav (Visual C#)


Download sample
El ejemplo CompactNav es un explorador del sistema de archivos de Smartphone diseñado en código administrado mediante
la versión 1.0 de .NET Compact Framework.
Nota de seguridad
Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que qui
zás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales
o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para ejecutar este ejemplo


1. Haga clic en Descargar ejemplo.
Aparece el cuadro de mensaje Descarga de archivos.
2. Haga clic en Abrir y, en la columna izquierda de la ventana de carpeta ZIP, haga clic en Extraer todos los archivos.
Se abre el Asistente para extracción.
3. Haga clic en Siguiente. Puede cambiar el directorio donde se extraerán los archivos y, a continuación, haga clic de nuevo
en Siguiente.
Asegúrese de activar la casilla de verificación Mostrar archivos extraídos y, a continuación, haga clic en Finalizar.
4. Haga doble clic en el archivo .sln del ejemplo.
La solución de ejemplo se muestra en el Explorador de soluciones. Podría obtener una advertencia de seguridad que
indica que la ubicación de la solución no es de confianza. Haga clic en Aceptar para continuar.
Lo que muestra el ejemplo
Este ejemplo ilustra cómo implementar un explorador básico del sistema de archivos, incluyendo las siguientes técnicas:
Utilizar la invocación de plataformas (pInvoke) para llamar a API no administradas como CreateProcess.
Control de excepciones.
Cómo cargar imágenes desde un sistema de archivos.
Ejecutar archivos ejecutables utilizando CreateProcess para seleccionarlos.
Escribir directorios seleccionándolos y presionando la tecla de acción.
Obtener acceso a directorios primarios utilizando un elemento de menú (UpDir) o seleccionando el directorio ".."
convencional.
Implementar una opción Salir para comprobar sólo la conveniencia, ya que no son comunes ni recomendables para
aplicaciones Smartphone reales.
Desarrollo para Smart Device

Ejemplos nativos (Dispositivos)


Visite Mobile Developer Center si desea obtener ejemplos de aplicaciones de dispositivos mediante Visual C++. Entre estos
ejemplos se incluyen los siguientes:
Ejempl Descripción
o
PhoneM Muestra menús en una aplicación de Smartphone.
enus

TextEdit Muestra los fundamentos del uso de Microsoft Foundation Classes y proporciona un punto de partida para escribir a
or plicaciones MFC propias.

PoomVi Muestra una interfaz de usuario independiente del dispositivo en un programa que realiza consultas, y muestra todos
ewer los campos de las bases de datos de citas, contactos y tareas.

Para obtener más información sobre estos ejemplos y las funciones que describen, vea el archivo Readme.txt que se incluye
con cada ejemplo.
Vea también
Otros recursos
Ejemplos de dispositivos inteligentes
Desarrollo para Smart Device

Referencia (dispositivos)
En esta sección se ofrece información de referencia para proyectos de dispositivos inteligentes. Las secciones relacionadas
proporcionan los vínculos a los temas de referencia específicos de algunos idiomas para los proyectos de dispositivos.
En esta sección
Referencia de .NET Compact Framework para proyectos de dispositivos
Proporciona información sobre .NET Compact Framework.
Referencia a ATL para dispositivos
Proporciona direcciones para mostrar temas de referencia de ATL admitidos en los proyectos de dispositivos.
Referencia a MFC para dispositivos
Proporciona temas de la referencia de MFC para dispositivos.
Referencia de la biblioteca en tiempo de ejecución de C para dispositivos
Proporciona temas de referencia de la biblioteca en tiempo de ejecución de C para dispositivos.
Referencia de la Biblioteca estándar de C++ para dispositivos
Proporciona temas de referencia del subconjunto de la biblioteca de C++ estándar disponible para el desarrollo de
aplicaciones para dispositivos.
Compilers for Smart Devices
Describe los procesadores ARM, Renesas y los de la gama MIPS, y enumera las diferencias entre los compiladores de
escritorio y los de dispositivos.
Referencia de la interfaz de usuario para dispositivos
Muestra una lista de los elementos de interfaz disponibles de manera exclusiva para el desarrollo de aplicaciones para
dispositivos inteligentes.
Referencia del lenguaje Visual Basic para dispositivos
Resume las diferencias entre los elementos de programación disponibles en Visual Basic para los proyectos de dispositivos
inteligentes.
Mensajes de error (Dispositivos)
Proporciona información sobre cómo resolver problemas de errores concretos.
Vea también
Otros recursos
Desarrollo de dispositivos inteligentes
Desarrollo para Smart Device

Referencia de .NET Compact Framework para proyectos de


dispositivos
.NET Compact Framework es un subconjunto de la biblioteca de clases .NET Framework y también contiene clases diseñadas
expresamente para él. Hereda la arquitectura .NET Framework completa de Common Language Runtime y la ejecución de
código administrado.
Para obtener más información, vea .NET Compact Framework.
Vea también
Otros recursos
.NET Framework
Desarrollo para Smart Device

Referencia a ATL para dispositivos


Debido a las limitaciones del dispositivo, ATL para dispositivos no admite todas las funciones que admite la versión estándar.
Esta sección contiene temas que explican esas diferencias.
En esta sección
Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles con dispositivos
Describe cómo utilizar el mecanismo de filtrado de la Ayuda para mostrar información actualizada sobre las referencias de
ATL para dispositivos, las clases ATL y los métodos que admiten los dispositivos.
Diferencias entre ATL para dispositivos y ATL estándar
Describe las diferencias entre ATL estándar y ATL para dispositivos.
Secciones relacionadas
ATL Reference
Si es la primera vez que usa ATL, este le servirá como introducción a Active Template Library para equipos de escritorio.
Vea también
Otros recursos
Referencia (dispositivos)
Desarrollo para Smart Device

Cómo: Encontrar la Ayuda para los métodos y clases ATL


compatibles con dispositivos
La Ayuda de Visual Studio proporciona un filtro de Desarrollo de Smart Device para la tabla de contenido y el índice.
Cuando se aplica este filtro, los temas visibles se reducen para incluir únicamente la documentación que se considera básica
para los desarrolladores de dispositivos inteligentes. La aplicación de este filtro constituye un medio excelente para mostrar
sólo los subconjuntos de temas de referencia para dispositivos inteligentes, incluidas las bibliotecas de ATL.
Para ver temas y documentación de referencia de C++, utilice Configuración de Visual C++.
Si se aplica un filtro de lenguaje, como Visual C#, los temas de desarrollo de dispositivos inteligentes se excluyen de los temas
visibles. Por esta razón, la mejor opción es utilizar el filtro de Desarrollo de Smart Device o no aplicar ningún filtro. Inicie
Visual Studio con una configuración de desarrollo de lenguaje, como Configuración de desarrollo de Visual C#. Puede
cambiar la configuración a Configuración de Visual C++.
Cómo establecer el filtro de Desarrollo de Smart Device
Para establecer el filtro de Desarrollo de Smart Device
1. En el menú Ayuda de Visual Studio, haga clic en Contenido o en Índice.
2. En el cuadro Filtrado por, seleccione Desarrollo de Smart Device.
Para cambiar la configuración de desarrollo
1. En el menú Herramientas de Visual Studio, haga clic en Importar y exportar configuraciones.
2. En la página Pantalla de bienvenida del asistente, haga clic en Restablecer todas las configuraciones y, a
continuación, haga clic en Siguiente.
Si no está seguro de las opciones, presione F1 para abrir el tema de Ayuda del asistente.
3. En la página Guardar configuración actual, seleccione la opción para guardar la configuración actual y, a continuación,
haga clic en Siguiente.
4. En la página Elija una colección predeterminada de configuraciones, seleccione Configuración de Visual C++ y, a
continuación, haga clic en Finalizar.

Vea también
Tareas
Cómo: Encontrar la Ayuda para los métodos y clases MFC compatibles con dispositivos
Conceptos
Filtros de Ayuda para Visual Studio
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Diferencias entre ATL para dispositivos y ATL estándar


ATL se ha utilizado tradicionalmente para desarrollar las aplicaciones basadas en COM. ATL 8.0 dispone de funciones para
facilitar la programación de COM, como las clases para convertir y manipular cadenas, administrar matrices y para listas y
árboles. Los desarrolladores de dispositivos ATL observarán algunas diferencias entre ATL 8.0 y Visual C++ incrustado, como
la compatibilidad con clientes de servicios Web, la compatibilidad para socket extendido (IPv6) y mejoras de seguridad. Sin
embargo, ATL 8.0 para dispositivos no tiene toda la funcionalidad de escritorio de ATL. Aunque el consumo de servicios Web
está incluido en la versión de dispositivo ATL, no lo están la seguridad, los servicios, los datos ATL y el servidor ATL.
Esta sección contiene temas que explican las diferencias y similitudes entre ATL para dispositivos y el ATL estándar. Para
obtener más información sobre cómo filtrar temas de Ayuda para obtener referencias de ATL para dispositivos, vea Cómo:
Encontrar la Ayuda para los métodos y clases ATL compatibles con dispositivos.
En esta sección
Lista de clases ATL admitidas
Proporciona una lista de todas las clases ATL que se admiten totalmente en los proyectos de dispositivos
ATL única para clases de dispositivos
Proporciona una lista de clases ATL no admitidas sólo para dispositivos.
Vea también
Referencia
Lista de clases ATL admitidas
Otros recursos
Referencia a ATL para dispositivos
ATL única para clases de dispositivos
Desarrollo para Smart Device

Lista de clases ATL admitidas


A continuación, se muestran las clases ATL compatibles para dispositivos. Debido a las limitaciones de los dispositivos, puede
que la funcionalidad de una clase disponible en el escritorio no lo esté en el dispositivo. Para ver los detalles de las clases y
métodos admitidos en los dispositivos, puede utilizar el mecanismo de filtrado de la Ayuda del entorno de desarrollo.
Para obtener información sobre el filtrado de la Ayuda del entorno de desarrollo para ver temas de ATL y referencias, incluso
los métodos ATL para los dispositivos, haga referencia a Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles
con dispositivos.
Las clases ATL compatibles con los dispositivos incluyen:
allocator Class
AtlHtmlAttrs Class
CAdapt Class
CAtlBaseAuthObject Class
CAtlBaseModule Class
CAtlComModule Class
CAtlException Class
CAtlFile Class
CAtlFileMappingBase Class
CAtlHttpClientT Class
CAtlNavigateData Class
CAtlTemporaryFile Class
CAtlWinModule Class
CAutoPtr Class
CAutoPtrArray Class
CAutoPtrElementTraits Class
CAutoPtrList Class
CAutoVectorPtr Class
CAutoVectorPtrElementTraits Class
CBasicAuthObject Class
CCacheDataBase Class
CComAggObject Class
CComAllocator Class
CComAutoCriticalSection Class
CComBSTR Class
CComCachedTearOffObject Class
CComClassFactory Class
CComClassFactory2 Class
CComClassFactorySingleton Class
CComContainedObject Class
CComCriticalSection Class
CComCritSecLock Class
CComDynamicUnkArray Class
CComFakeCriticalSection Class
CComHeap Class
CComHeapPtr Class
CComModule Class
CComMultiThreadModel Class
CComMultiThreadModelNoCS Class
CComObject Class
CComObjectGlobal Class
CComObjectNoLock Class
CComObjectRootEx Class
CComObjectStack Class
CComPolyObject Class
CComPtr Class
CComPtrBase Class
CComQIPtr Class
CComSafeArrayBound Class
CComTearOffObject Class
CComUnkArray Class
CComVariant Class
CContainedWindowT Class
CCriticalSection Class
CCRTAllocator Class
CCRTHeap Class
CCryptDerivedKey Class
CCryptHash Class
CCryptHMACHash Class
CCryptImportKey Class
CCryptKey Class
CCryptKeyedHash Class
CCryptMACHash Class
CCryptMD2Hash Class
CCryptMD4Hash Class
CCryptMD5Hash Class
CCryptProv Class
CCryptRandomKey Class
CCryptSHAHash Class
CCryptSSL3SHAMD5Hash Class
CCryptUserExKey Class
CCryptUserSigKey Class
CDefaultCharTraits Class
CDefaultCompareTraits Class
CDefaultElementTraits Class
CDefaultHashTraits Class
CDynamicChain Class
CElementTraits Class
CElementTraitsBase Class
CEvent Class
CExpireCuller Class
CFileTime Class
CFileTimeSpan Class
CFirePropNotifyEvent Class
CFixedLifetimeCuller Class
CGlobalHeap Class
CHandle Class
CHtmlGen Class
CHtmlGenBase Class
CHttpResponse Class
CImage Class
CLifetimeCuller Class
CLocalHeap Class
CLOUFlusher Class
CLRUFlusher Class
CMutex Class
CNoDllCachePeer Class
CNoExpireCuller Class
CNoFileCachePeer Class
CNoFlusher Class
CNonStatelessWorker Class
CNoStatClass Class
CNoWorkerThread Class
CNTLMAuthObject Class
COldFlusher Class
COleDateTime Class
COleDateTimeSpan Class
COrCullers Class
COrFlushers Class
CPoint Class
CPrimitiveElementTraits Class
CRect Class
CRegKey Class
CSemaphore Class
CSimpleArrayEqualHelper Class
CSimpleArrayEqualHelperFalse Class
CSimpleDialog Class
CSimpleMap Class
CSimpleMapEqualHelper Class
CSimpleMapEqualHelperFalse Class
CSocketAddr Class
CStrBufT Class
CStreamFormatter Class
CStreamOnWriteStream Class
CStringRefElementTraits Class
CTime Class
CTimeSpan Class
CUrl Class
CWin32Heap Class
CWindow Class
CWriteStreamHelper Class
Win32ThreadTraits Class
Vea también
Otros recursos
Diferencias entre ATL para dispositivos y ATL estándar
Referencia a ATL para dispositivos
Desarrollo para Smart Device

ATL única para clases de dispositivos


ATL para dispositivos tiene una clase única. En esta sección se describe esta clase.
En esta sección
CAtlCEValidateThreadIDDefault (Métodos)
Clase que proporciona macros relacionadas con subproceso y métodos únicos de los proyectos de dispositivos.
Vea también
Tareas
Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles con dispositivos
Otros recursos
Referencia a ATL para dispositivos
Desarrollo para Smart Device

CAtlCEValidateThreadIDDefault (Clase)
Introduce la clase CAtlCEValidateThreadIDDefault, que proporciona macros relacionadas con subprocesos y métodos
únicos de los proyectos de dispositivos.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CAtlCEValidateThreadIDDefault (Métodos)
La tabla siguiente contiene la lista de los métodos CAtlCEValidateThreadIDDefault:

CAtlCEValidateThreadIDDefault::C Crea una instancia de un objeto CAtlCEValidateThreadIDDefault y establece el miembro


AtlCEValidateThreadIDDefault de datos privados m_ThreadId.

CAtlCEValidateThreadIDDefault::Va Indica si el identificador de un subproceso que se utiliza para controlar el subproceso de lla
lidate mada es el mismo que el del subproceso de llamada original o es distinto.

La tabla siguiente contiene la lista de las macros CAtlCEValidateThreadIDDefault:

CE_VALIDATE_THREADI En la versión de depuración, CE_VALIDATE_THREADID_ASSERT genera un informe de depuración cua


D_ASSERT (Macro) ndo el método CAtlCEValidateThreadIDDefault::Validate devuelve el valor falso.

CE_VALIDATE_THREADI Devuelve el parámetro de la macro si se valida el identificador del subproceso.


D_RETURN (Macro)

CE_VALIDATE_THREADI Inicia una excepción si se valida el identificador del subproceso.


D_THROW (Macro)

Vea también
Conceptos
CAtlCEValidateThreadIDDefault (Clase)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CAtlCEValidateThreadIDDefault::CAtlCEValidateThreadIDDefault
Crea una instancia de un objeto CAtlCEValidateThreadIDDefault y establece el miembro de datos privados m_ThreadId en el
identificador de subproceso actual, que se utiliza como controlador del subproceso de llamada.

CAtlCEValidateThreadIDDefault();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CAtlCEValidateThreadIDDefault::Validate
Indica si el identificador de un subproceso que se utiliza para controlar el subproceso de llamada es el mismo que el del
subproceso de llamada original o es distinto.

bool Validate ();

Valor devuelto
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CE_VALIDATE_THREADID_ASSERT (Macro)
En las versiones de depuración, CE_VALIDATE_THREADID_ASSERT genera un informe de depuración cuando el método
CAtlCEValidateThreadIDDefault::Validate devuelve el valor falso.

CE_VALIDATE_THREADID_ASSERT();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CE_VALIDATE_THREADID_RETURN (Macro)
Devuelve el parámetro de la macro si se valida el identificador del subproceso.

CE_VALIDATE_THREADID_RETURN(r);

Parámetros
En la tabla siguiente, se describe el parámetro de la macro CE_VALIDATE_THREADID_RETURN de la clase
CAtlCEValidateThreadIDDefault.
Parámetro Descripción
r El parámetro que se devuelve si se valida el subproceso.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Referencia
CAtlCEValidateThreadIDDefault::Validate
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

CE_VALIDATE_THREADID_THROW (Macro)
Inicia una excepción si se valida el identificador del subproceso.

CE_VALIDATE_THREADID_THROW(e);

Parámetros
En la tabla siguiente, se describe el parámetro de la macro CE_VALIDATE_THREADID_THROW de la clase
CAtlCEValidateThreadIDDefault.
Parámetro Descripción
e Excepción que se produce.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en atlcore.h.
Vea también
Referencia
CAtlCEValidateThreadIDDefault::Validate
Conceptos
CAtlCEValidateThreadIDDefault (Métodos)
Otros recursos
ATL única para clases de dispositivos
Desarrollo para Smart Device

Referencia a MFC para dispositivos


En Visual Studio 2005, los proyectos de Smart Device usan la versión 8.0 de MFC para dispositivos. Esta versión de MFC es
distinta tanto para la versión MFC 7.0 estándar para escritorio como para MFC 3.0 de eMbedded Visual C++. En esta sección,
se explica dónde encontrar ayuda.
Los archivos de MFC para dispositivos se encuentran en la carpeta %Archivos de programa%\Microsoft Visual Studio 8\VC\ce
En esta sección
MFC Classes
Ubicación de la mayor parte de la documentación de MFC para dispositivos.
Observe que MFC para dispositivos comparte la documentación con la versión MFC estándar para escritorio.
Desviaciones de comportamiento de MFC estándar para escritorio que se tratan en la sección del tema denominada "Notas
para desarrolladores de dispositivos inteligentes".
MFC única para clases de dispositivos
Ubicación en la que se documentan las clases únicas de MFC para dispositivos inteligentes. Sólo hay unas pocas clases
únicas.
Cómo: Encontrar la Ayuda para los métodos y clases MFC compatibles con dispositivos
Describe cómo usar el mecanismo de filtración para mostrar la información actualizada en las referencias a MFC/ATL para
dispositivos.
Lista de clases MFC de escritorio admitidas en los dispositivos
Muestra las clases de MFC estándar para escritorio que admiten los dispositivos.
Lista de clases MFC de escritorio no admitidas en los dispositivos
Muestra las clases de MFC estándar para escritorio que no admiten los dispositivos.
Lista de clases de eVC no admitidas de MFC 3.0 a 8.0
Describe las diferencias entre eVC MFC 3.0 y MFC 8.0 para dispositivos de Visual Studio 2005.
Diferencias entre MFC C++ para dispositivos y MFC estándar
Gráficos que muestran las clases admitidas en el escritorio y que también admiten los dispositivos MFC C++.
Vea también
Conceptos
Asistente para actualización de eMbedded Visual C++ a Visual Studio 2005
Referencia de la Biblioteca estándar de C++ para dispositivos
Otros recursos
Referencia (dispositivos)
Desarrollo para Smart Device

Asistentes de C++ para aplicaciones MFC en Windows CE


Mediante el uso de los asistentes de Visual C++ puede escribir aplicaciones MFC destinadas a varios dispositivos de Windows
CE. Entre los asistentes de Visual C++ se incluyen los correspondientes a aplicaciones de Smart Device MFC, controles ActiveX
de Smart Device MFC y archivos DLL de Smart Device MFC.
Asistentes de C++ para aplicaciones MFC en Windows CE
Entre los asistentes de C++ para aplicaciones MFC en Windows CE se incluyen los siguientes:
Asistente para aplicaciones de Smart Device MFC
El Asistente para aplicaciones de Smart Device MFC genera una aplicación con funcionalidad integrada y con las
características básicas de una aplicación ejecutable para Windows CE (.exe). Para obtener más información al respecto,
vea:
Características avanzadas, Asistente para aplicaciones de Smart Device MFC
Tipo de aplicación, Asistente para aplicaciones de Smart Device MFC
Plataformas, Asistente para aplicaciones de Smart Device MFC
Características de la interfaz de usuario, Asistente para aplicaciones de Smart Device MFC
Cadenas de plantillas de documentos, Asistente para aplicaciones de Smart Device MFC
Clases generadas, Asistente para aplicaciones de Smart Device MFC
Asistente para controles ActiveX de Smart Device MFC
El proyecto generado con el asistente para MFC incluye archivos de código fuente escritos en C++ (.cpp), archivos de
recursos (.rc) y un archivo de proyecto (.vcproj). Para obtener más información al respecto, vea:
Configuración del control, Asistente para controles ActiveX de Smart Device MFC
Nombres del control, Asistente para controles ActiveX de Smart Device MFC
Plataformas, Asistente para controles ActiveX de Smart Device MFC
Configuración de la aplicación, Asistente para controles ActiveX de Smart Device MFC
Asistente para archivos DLL de Smart Device MFC
Puede utilizar el proyecto DLL de Smart Device MFC para crear un archivo DLL de Smart Device. Para obtener más
información al respecto, vea:
Configuración de la aplicación, Asistente para archivos DLL de Smart Device MFC
Plataformas, Asistente para archivos DLL de Smart Device MFC.
Vea también
Tareas
Tutorial: Crear una aplicación MFC multiplataforma para Smart Devices
Desarrollo para Smart Device

Cómo: Encontrar la Ayuda para los métodos y clases MFC


compatibles con dispositivos
La Ayuda de Visual Studio proporciona un filtro de Desarrollo de Smart Device para la tabla de contenido y el índice.
Cuando se aplica este filtro, los temas visibles se reducen para incluir únicamente la documentación que se considera básica
para los desarrolladores de dispositivos inteligentes. La aplicación de este filtro constituye un medio excelente para mostrar
sólo los subconjuntos de temas de referencia para dispositivos inteligentes, incluidas las bibliotecas de MFC.
Para ver temas y documentación de referencia de C++, utilice Configuración de Visual C++.
Si se aplica un filtro de lenguaje, como Visual C#, los temas de desarrollo de dispositivos inteligentes se excluyen de los temas
visibles. Por esta razón, la mejor opción es utilizar el filtro de Desarrollo de Smart Device o no aplicar ningún filtro.
Inicie Visual Studio con una configuración de desarrollo de lenguaje, como Configuración de desarrollo de Visual C#.
Puede cambiar esta configuración predeterminada a Configuración de Visual C++.
Cómo establecer el filtro de Desarrollo de Smart Device
Para establecer el filtro de Desarrollo de Smart Device
1. En el menú Ayuda de Visual Studio, haga clic en Contenido o en Índice.
2. En el cuadro Filtrado por, seleccione Desarrollo de Smart Device.
Para cambiar la configuración de desarrollo
1. En el menú Herramientas de Visual Studio, haga clic en Importar y exportar configuraciones.
2. En la página Pantalla de bienvenida del asistente, haga clic en Restablecer todas las configuraciones y, a
continuación, haga clic en Siguiente.
Si no está seguro de las opciones, presione F1 para abrir el tema de Ayuda del asistente.
3. En la página Guardar configuración actual, seleccione la opción para guardar la configuración actual y, a continuación,
haga clic en Siguiente.
4. En la página Elija una colección predeterminada de configuraciones, seleccione Configuración de Visual C++ y, a
continuación, haga clic en Finalizar.
Vea también
Conceptos
Lista de clases MFC de escritorio no admitidas en los dispositivos
Filtros de Ayuda para Visual Studio
Otros recursos
Introducción a los proyectos para Smart Device
Desarrollo para Smart Device

Lista de clases de eVC no admitidas de MFC 3.0 a 8.0


Este tema se ha actualizado para Visual Studio 2005 SP1.
Embedded Visual C++
CDaoFieldExchange Class
CDBVariant Class
CFieldExchange Class
CFontDialog Class
CLongBinary Class
COleCmdUI Class
COleCurrency Class
COleDataObject Class
COlePropertyPage Class
CPrintDialog Class
CPrintInfo Members
CSocketFile Class
En Visual Studio 2005 SP1, se agregaron quince clases MFC de eVC a las bibliotecas de MFC de dispositivos para mejorar la
migración de proyectos de Embedded Visual C++. Las clases siguientes no se admiten en MFC de dispositivos de Visual Studio
2005, pero sí en el SP1 de Visual Studio 2005 SP1 para dispositivos.
CBitmap Class
CDialogBar Class
CEditView Class
CFindReplaceDialog Class
CHttpConnection Class
CHttpFile Class
CInternetConnection Class
CInternetException Class
CInternetFile Class
CInternetSession Class
COleSafeArray Class
CReBar Class
CReBarCtrl Class
CRecentFileList Class
CSplitterWnd Class
Las clases siguientes son typedef que utilizan clases de plantillas para proporcionar una funcionalidad equivalente:
CByteArray Class
CDWordArray Class
CMapPtrToPtr Class
CMapPtrToWord Class
CMapStringToOb Class
CMapStringToPtr Class
CMapStringToString Class
CMapWordToOb Class
CMapWordToPtr Class
CObArray Class
CObList Class
COleSafeArray Class
CPtrArray Class
CPtrList Class
CStringArray Class
CStringList Class
CUIntArray Class
CWordArray Class
Diferencias en el funcionamiento de las API entre MFC 3.0 y MFC 8.0
La clase de diálogo CDocument::SaveModified y los recursos asociados se han quitado de MFC 8.0 para todas las
plataformas. Por tanto, en las las plataformas Pocket PC 2003 y Smartphone 2003 los métodos DoSave y
SaveModified no tienen nombres de archivo predeterminados ni los solicitan de forma predeterminada, como en el
caso de los archivos generados automáticamente. Sin embargo, se ofrece una opción para modificar este
comportamiento y preguntar por el nombre de archivo en la plataforma Pocket PC 2003. En la plataforma Smartphone,
puede llamar a CDocManager::DoPromptFileName, si desea preguntar por el nombre de archivo. La plataforma
Windows CE admite el comportamiento de nombres de archivo predeterminados de los métodos DoSave y
SaveModified, y su funcionalidad es la misma que en la versión de escritorio.
MFC 8.0 para dispositivos no admite el acoplamiento. Por ejemplo, no se admiten los miembros
CCommandBar::m_pDockBar y CCommandBar::m_pDockContext. Para obtener más información, vea
CCommandBar (Clase). Para obtener más información sobre el acoplamiento, vea Docking and Floating Toolbars.
En MFC 8.0 para dispositivos, CDC::FrameRect ha dejado de ser miembro de CDC Class.
En MFC 8.0 para dispositivos, CCeDocList pasa a denominarse CDocList (Clase).
En MFC 8.0 para dispositivos, la funcionalidad de CCeSocket está encapsulada en CAsyncSocket Class.
En MFC 8.0 para dispositivos, no se admite CFont::CreateFont, pero puede utilizar CFont::CreatePointFont en su lugar.
En MFC 8.0 para los dispositivos, han dejado de admitirse los miembros CCommandBar::m_pDockBar y
CCommandBar::m_pDockContext.
En MFC 8.0 para dispositivos, INLINEIMAGEINFO sustituye a la estructura LPINLINEIMAGEINFO.
El Visual Studio 2005 los recursos generados por asistente siguen las directrices de la interfaz de usuario de Windows
Mobile 5.0. Esto significa que las clases MenuBar de todas las aplicaciones tendrán siempre el botón Nuevo habitual en
el lado izquierdo y el botón Menú en el lado derecho. Por consiguiente, MFC 8.0 para dispositivos no admite la variable
m_bShowSharedNewButton. Por ejemplo, si el código de la aplicación está usando
wndCommandBar.m_bShowSharedNewButton = TRUE;, puede convertir la línea de código en un comentario y trasladar la
aplicación a MFC 8.0 para dispositivos.
Si el código de la aplicación está utilizando ON_NOTIFY(DLN_CE_CREATE, AFXCE_ID_DOCLIST o OnCreateDocList,,
obtendrá los siguientes errores de compilación:
MainFrm.cpp(42): error C2065: 'DLN_CE_CREATE': identificador no declarado
MainFrm.cpp(42) : error C2065: 'AFXCE_ID_DOCLIST': identificador no declarado
En MFC 8.0, puede utilizar sin ningún riesgo DLN_DOCLIST_CREATE, DLN_DOCLIST_DESTROY y AFX_ID_DOCLIST.
Si utiliza MFC 8.0, no podrá establecer un vínculo con las bibliotecas CRT estándar.
Al trasladar a MFC 8.0, incluya # define _WIN32_WCE_PSPC. En MFC 8.0, este indicador no está definido de forma
predeterminada.
Para obtener más información, vea Lista de clases MFC de escritorio no admitidas en los dispositivos.

Vea también
Conceptos
Diferencias entre MFC C++ para dispositivos y MFC estándar
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

Diferencias entre MFC C++ para dispositivos y MFC estándar


Por motivos de restricciones de los dispositivos, como la memoria, MFC para dispositivos no admite todas las clases y
capacidades que admite el escritorio estándar de MFC. La tabla siguiente describe las clases admitidas y no admitidas en la
última versión de Visual Studio para dispositivos (versión 8.0 de MFC).
También puede utilizar el mecanismo de filtrado de la funcionalidad de Ayuda para obtener una lista de clases de MFC
admitidas en el equipo de escritorio y también se admiten en otros dispositivos.
Para obtener más información sobre el filtrado de temas de ayuda para las referencias de MFC para dispositivos,
incluidas las clases y métodos compatibles, consulte Cómo: Encontrar la Ayuda para los métodos y clases MFC
compatibles con dispositivos.
Para obtener más información sobre las clases de MFC admitidas para los dispositivos, consulte Lista de clases MFC de
escritorio admitidas en los dispositivos.
Para obtener más información sobre las clases de MFC no admitidas para los dispositivos, consulte Lista de clases MFC
de escritorio no admitidas en los dispositivos.
El gráfico siguiente muestra las clases admitidas en el escritorio que también se admiten en los dispositivos MFC C++.
Gráfico de diferencias entre MFC 8.0 para dispositivos y la versión MFC 7.0 estándar para escritorio
Legend
Símbolo Descripción
Clases de la versión MFC 7.0 estándar para escritorio admitidas en MFC para dispositivos 8.0

Clases de la versión MFC 7.0 estándar para escritorio no admitidas en MFC para dispositivos 8.0

Clasificación de clases
Vea también
Otros recursos
Referencia a MFC para dispositivos
MFC única para clases de dispositivos
Desarrollo para Smart Device

Lista de clases MFC de escritorio admitidas en los dispositivos


Este tema se ha actualizado para SP1 de Visual Studio 2005.
A continuación, se muestran las clases compatibles con MFC en la última versión de Visual Studio para dispositivos. Debido a
las limitaciones de los dispositivos, puede que una parte de la funcionalidad de una clase que está disponible en el escritorio
no lo esté en el dispositivo.
La lista siguiente se ha actualizado para SP1 de Visual Studio 2005.
Las clases MFC compatibles para dispositivos incluyen:
CArchive Class
CArchiveException Class
CArray Class
CAsyncSocket Class
CBitmap Class
CBitmap Class (se admite en SP1 de Visual Studio 2005)
CBrush Class
CButton Class
CClientDC Class
CCmdTarget Class
CCmdUI Class
CColorDialog Class
CComboBox Class
CCommandBar (Clase)
CCommandLineInfo Class
CCommonDialog Class
CConnectionPoint Class
CControlBar Class
CCriticalSection Class
CCtrlView Class
CDataExchange Class
CDateTimeCtrl Class
CDC Class
CDialog Class
CDialogBar Class (se admite en SP1 de Visual Studio 2005)
CDocList (Clase)
CDocListDocTemplate (Clase)
CDocTemplate Class
CDocument Class
CEdit Class
CEditView Class (se admite en SP1 de Visual Studio 2005)
CEvent Class
CException Class
CFile Class
CFileDialog Class
CFileException Class
CFindReplaceDialog Class (se admite en SP1 de Visual Studio 2005)
CFixedStringT Class
CFont Class
CFontHolder Class
CFormView Class
CFrameWnd Class
CGdiObject Class
CHeaderCtrl Class
CHttpConnection Class (se admite en SP1 de Visual Studio 2005)
CHttpFile Class (se admite en SP1 de Visual Studio 2005)
CImageList Class
CInternetConnection Class (se admite en SP1 de Visual Studio 2005)
CInternetException Class (se admite en SP1 de Visual Studio 2005)
CInternetFile Class (se admite en SP1 de Visual Studio 2005)
CInternetSession Class (se admite en SP1 de Visual Studio 2005)
CInvalidArgException Class
CList Class
CListBox Class
CListCtrl Class
CListView Class
CMap Class
CMemFile Class
CMemoryException Class
CMenu Class
CMonthCalCtrl Class
CMultiLock Class
CMutex Class
CNotSupportedException Class
CObject Class
COccManager Class
COleControl Class
COleControlContainer Class
COleControlModule Class
COleControlSite Class
COleDateTime Class
COleDispatchDriver Class
COleDispatchException Class
COleException Class
COleObjectFactory Class
COlePropertyPage Class
COleSafeArray Class (se admite en SP1 de Visual Studio 2005)
COleStreamFile Class
COleVariant Class
CPaintDC Class
CPalette Class
CPen Class
CProgressCtrl Class
CPropertyPage Class
CPropertySheet Class
CPropExchange Class
CReBar Class (se admite en SP1 de Visual Studio 2005)
CReBarCtrl Class (se admite en SP1 de Visual Studio 2005)
CRecentFileList Class (se admite en SP1 de Visual Studio 2005)
CRectTracker Class
CResourceException Class
CRgn Class
CScrollBar Class
CScrollView Class
CSemaphore Class
CSimpleException Class
CSimpleStringT Class
CSingleDocTemplate Class
CSingleLock Class
CSliderCtrl Class
CSocket Class
CSocketFile Class
CSpinButtonCtrl Class
CSplitterWnd Class (se admite en SP1 de Visual Studio 2005)
CStatic Class
CStatusBar Class
CStatusBarCtrl Class
CStdioFile Class
CStringT Class
CSyncObject Class
CTabCtrl Class
CTime Class
CTimeSpan Class
CToolBar Class
CToolBarCtrl Class
CTreeCtrl Class
CTreeView Class
CTypedPtrList Class
CUserException Class
CView Class
CWinApp Class
CWindowDC Class
CWinThread Class
CWnd Class
Hay algunas diferencias de funcionamiento entre estas clases. Para obtener más información, vea Lista de clases de eVC no
admitidas de MFC 3.0 a 8.0.
Para ver los detalles de los temas y referencias de compatibilidad de MFC, puede utilizar el mecanismo de filtrado de la Ayuda
del entorno de desarrollo. Para obtener más información sobre este mecanismo de filtrado, vea Cómo: Encontrar la Ayuda para
los métodos y clases MFC compatibles con dispositivos.
Vea también
Conceptos
Lista de clases de eVC no admitidas de MFC 3.0 a 8.0
Otros recursos
Referencia a MFC para dispositivos
MFC única para clases de dispositivos
Desarrollo para Smart Device

Lista de clases MFC de escritorio no admitidas en los


dispositivos
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Debido a las limitaciones de los dispositivos, puede que la funcionalidad de las clases MFC que está disponible en el escritorio
no lo esté en el dispositivo. Para obtener una lista de clases MFC compatibles para dispositivos, consulte Lista de clases MFC de
escritorio admitidas en los dispositivos. Las clases de MFC estándar de escritorio admitidas en MFC para dispositivos son las
siguientes:
CAnimateCtrl Class
CAsyncMonikerFile Class
CByteArray Class
CCachedDataPathProperty Class
CCheckListBox Class
CComboBoxEx Class
CDaoDatabase Class
CDaoException Class
CDaoFieldExchange Class
CDaoQueryDef Class
CDaoRecordset Class
CDaoRecordView Class
CDaoTableDef Class
CDaoWorkspace Class
CDatabase Class
CDataPathProperty Class
CDBException Class
CDBVariant Class
CDHtmlDialog Class
CDocItem Class
CDockState Class
CDocObjectServer Class
CDocObjectServerItem Class
CDragListBox Class
CDumpContext Class
CDWordArray Class
CFieldExchange Class
CFileFind Class
CFileTime Class
CFileTimeSpan Class
CFontDialog Class
CFtpConnection Class
CFtpFileFind Class
CGopherConnection Class
CGopherFile Class
CGopherFileFind Class
CGopherLocator Class
CHotKeyCtrl Class
CHtmlEditCtrl Class
CHtmlEditCtrlBase Class
CHtmlEditDoc Class
CHtmlEditView Class
CHtmlStream Class
CHtmlView Class
CHttpArg Class
CHttpArgList Class
CHttpFilter Class
CHttpFilterContext Class
CHttpServer Class
CHttpServerContext Class
CImage Class
CIPAddressCtrl Class
CLinkCtrl Class
CLongBinary Class
CMapPtrToPtr Class
CMapPtrToWord Class
CMapStringToOb Class
CMapStringToPtr Class
CMapStringToString Class
CMapWordToOb Class
CMapWordToPtr Class
CMDIChildWnd Class
CMDIFrameWnd Class
CMetaFileDC Class
CMiniFrameWnd Class
CMonikerFile Class
CMultiDocTemplate Class
CMultiPageDHtmlDialog Class
CObArray Class
CObList Class
COleBusyDialog Class
COleChangeIconDialog Class
COleChangeSourceDialog Class
COleClientItem Class
COleCmdUI Class
COleConvertDialog Class
COleCurrency Class
COleDataObject Class
COleDataSource Class
COleDateTimeSpan Class
COleDBRecordView Class
COleDialog Class
COleDocObjectItem Class
COleDocument Class
COleDropSource Class
COleDropTarget Class
COleInsertDialog Class
COleIPFrameWnd Class
COleLinkingDoc Class
COleLinksDialog Class
COleMessageFilter Class
COlePasteSpecialDialog Class
COlePropertiesDialog Class
COleResizeBar Class
COleServerDoc Class
COleServerItem Class
COleTemplateServer Class
COleUpdateDialog Class
CPageSetupDialog Class
CPictureHolder Class
CPrintDialog Class
CPrintDialogEx Class
CPrintInfo Members
CPoint Class
CPtrArray Class
CPtrList Class
CRecordset Class
CRecordView Class
CRect Class
CRichEditCntrItem Class
CRichEditCtrl Class
CRichEditDoc Class
CRichEditView Class
CSharedFile Class
CSize Class
CStrBufT Class
CStringArray Class
CStringData Class
CStringList Class
CToolTipCtrl Class
CTypedPtrArray Class
CTypedPtrMap Class
CUIntArray Class
CWaitCursor Class
CWinFormsControl Class
CWinFormsDialog Class
CWinFormsView Class
CWordArray Class
En el SP1 de Visual Studio 2005, se han agregado 15 clases de MFC de escritorio a las bibliotecas de MFC para dispositivos.
Las clases siguientes no se admiten en MFC de dispositivos de Visual Studio 2005, pero sí en el SP1 de Visual Studio 2005 SP1
para dispositivos.
CBitmap Class
CDialogBar Class
CEditView Class
CFindReplaceDialog Class
CHttpConnection Class
CHttpFile Class
CInternetConnection Class
CInternetException Class
CInternetFile Class
CInternetSession Class
COleSafeArray Class
CReBar Class
CReBarCtrl Class
CRecentFileList Class
CSplitterWnd Class
Vea también
Referencia
Lista de clases MFC de escritorio admitidas en los dispositivos
Conceptos
Lista de clases de eVC no admitidas de MFC 3.0 a 8.0
Otros recursos
Referencia a MFC para dispositivos
MFC única para clases de dispositivos
MFC Classes
Desarrollo para Smart Device

MFC única para clases de dispositivos


MFC para dispositivos tiene algunas clases únicas. En esta sección se describen estas clases.
En esta sección
CCommandBar (Clase)
Combina la funcionalidad de las barras de menús y las barras de herramientas, y está diseñada específicamente para
dispositivos con pantallas pequeñas.
CDocList (Clase)
Encapsula la implementación del sistema operativo del tipo de ventana DocList, con funciones adicionales para la
integración con una arquitectura documento/vista de MFC.
CDocListDocTemplate (Clase)
Perfeccionamiento del tipo de aplicación de SDI facilitado por CSingleDocTemplate.
AfxEnableDRA
Función que habilita el conocimiento de la resolución de los dispositivos.
Secciones relacionadas
Referencia a MFC para dispositivos
Cómo: Encontrar la Ayuda para los métodos y clases MFC compatibles con dispositivos
Desarrollo para Smart Device

CCommandBar (Clase)
Esta clase permite crear y modificar barras de comandos. Una barra de comandos es una barra de herramientas que puede
incluir una barra de menús así como un botón Cerrar, un botón Ayuda y el botón Aceptar. Una barra de comandos puede
contener menús, cuadros combinados, botones y separadores. Un separador es un espacio en blanco que se utiliza para dividir
otros elementos en grupos o para reservar espacio en una barra de comandos. Después de crear un objeto CCommandBar,
utilice los métodos InsertMenuBar, InsertComboBox e InsertSeparator para insertar barras de menús, cuadros combinados y
separadores, respectivamente. Una vez finalizada la inclusión de todos estos elementos en la barra de comandos, utilice el
método AddAdornments para agregar el botón Cancelar y, opcionalmente, los botones Ayuda y Aceptar. Utilice el método
DrawMenuBar para cambiar el diseño de la barra de comandos cada vez que modifique un menú en la barra de comandos.
En Windows CE 5.0 ya no se admite el miembro CDialog::m_pWndEmptyCB y el usuario controla los procesos de creación y
de inserción. Anteriormente, esta variable miembro se utilizaba para señalar los objetos CommandBar o MenuBar vacíos en
Pocket PC.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar (Métodos)
En la tabla siguiente se enumeran los métodos CCommandBar.

CCommandBar::AddAdorn Agrega un botón Cerrar y, opcionalmente, los botones Ayuda y Aceptar a la barra de comandos.
ments

CCommandBar::AddBitma Agrega una o más imágenes a la lista de imágenes de botones disponibles para utilizarse en la barr
p a de comandos.

CCommandBar::AddButto Agrega uno o más botones a un control de barra de herramientas.


ns

CCommandBar::CComma Crea e inicializa un objeto CCommandBar.


ndBar

CCommandBar::Create Crea instancias de una nueva barra de comandos.

CCommandBar::DrawMen Cambia la posición y el diseño de la barra de comandos después de que se modifique un menú en
uBar la barra de comandos.

CCommandBar::GetMenu Recupera el identificador de un menú en la barra de comandos.

CCommandBar::Height Recupera el alto de la barra de comandos en píxeles.

CCommandBar::InsertButt Agrega uno o más botones a un control de barra de herramientas.


on

CCommandBar::InsertCom Agrega un cuadro combinado a la barra de comandos.


boBox

CCommandBar::InsertMen Agrega una barra de menús a la barra de comandos.


uBar

CCommandBar::InsertSepa Agrega un separador a la barra de comandos.


rator

CCommandBar::Show Muestra u oculta la barra de comandos.

CCeDocList La clase ha pasado a ser CDocList (Clase) en MFC 8.0. A continuación se muestra código de una aplicación de MFC
3.0:

CCommandBar* pDocListCB = pDocList->GetCommandBar();

Este código genera el error siguiente:


MainFrm.cpp (115): error C2039: 'GetCommandBar': no es un miembro de 'CDocList'
En lugar de utilizar este código, se puede crear un objeto CDocListCommandBar en MFC 8.0.
Vea también
Referencia
CCommandBar (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::AddAdornments
Agrega un botón Cerrar y, opcionalmente, los botones Ayuda y Aceptar a la barra de comandos.

BOOL AddAdornments(
Dword dwFlags = 0 );

Parámetros
En la tabla siguiente se describen los parámetros del método AddAdornments de CCommandBar (Clase).
Pará Descripción
metr
o
dwFla Especifica los botones opcionales que se van a agregar a la barra de comandos. El valor es cero si sólo se necesita el bot
gs ón Cerrar, o una combinación de los valores siguientes para crear botones adicionales:
Valor Descripción
CMDBAR Agrega un botón Ayuda a la barra de comandos. Cuando se hace clic en él, este botón envía un mensaje W
_HELP M_HELP.

CMDBAR Agrega un botón Aceptar a la barra de comandos. Cuando se selecciona, este botón envía un mensaje WM_
_OK COMMAND con IDOK como identificador del mensaje.

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
Este método crea un mínimo de dos botones: un separador que alinea las opciones gráficas seleccionadas a la derecha de la
barra de comandos, y las opciones gráficas seleccionadas.
Cuando un usuario hace clic en el botón Cerrar, Aceptar o Ayuda, el mensaje asociado al botón en cuestión se coloca en la
cola de mensajes de la aplicación. Todas las barras de comandos deben tener un botón Cerrar. Los botones Aceptar y Ayuda
son opcionales.
Llame a este método después de agregar a la barra de comandos el resto de elementos como menús, botones y cuadros
combinados.
Las aplicaciones existentes se deben volver a diseñar para eliminar la dependencia de AddAdornments.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar::AddBitmap
Agrega una o más imágenes a la lista de imágenes de botón disponibles en la barra de comandos.

int AddBitmap (
int nBitMapID,
int nNumImages );

Parámetros
En la tabla siguiente se describen los parámetros del método AddBitmap de CCommandBar (Clase).
nBitMapID
Especifica el identificador de recursos del mapa de bits que contiene la imagen o imágenes de botón que se van a agregar.
nNumImages
Especifica el número de imágenes de botón del mapa de bits.
Valores devueltos
Índice de base cero de la primera imagen nueva si se realizó correctamente; en caso contrario, -1.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar::AddButtons
Agrega uno o más botones a un control de barra de herramientas.

BOOL AddButtons(
UINT uNumButtons,
LPTBBUTTON lpButtons );

Parámetros
En la tabla siguiente se describen los parámetros del método AddButtons de CCommandBar (Clase).
uNumButtons
Especifica el número de botones que se van a agregar.
lpButtons
Especifica la dirección de una matriz de estructuras TBBUTTON que contiene información sobre los botones que se van a
agregar. El número de elementos de la matriz debe ser igual al número de botones especificado en nNumButtons.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
El puntero lpButtons señala una matriz de estructuras TBBUTTON.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::CCommandBar
Crea una instancia de un objeto CCommandBar.

CCommandBar ( );

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar::Create
Crea instancias de una nueva barra de comandos.

BOOL CommandBar::Create(
CWnd* pWndParent,
DWORD dwStyle,
UINT nBarID = AFX_IDW_TOOLBAR
);

Parámetros
En la tabla siguiente se describen los parámetros del método Create de CCommandBar (Clase).
pWndParent
Puntero del elemento primario del objeto de barra de comandos.
dwStyle
Especifica el estilo de la barra de comandos. Ver comentarios.
nBarID
Parámetro opcional. Especifica el Id. de la ventana secundaria de la barra de herramientas = AFX_IDW_TOOLBAR.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
La función Create crea una barra de comandos vacía. En Pocket PC y Smartphones, la barra de comandos se crea en la parte
inferior de la ventana. En Windows CE 5.0 ya no se admite el miembro CDialog::m_pWndEmptyCB, y el usuario controla los
procesos de creación y de inserción. Anteriormente, esta variable miembro se utilizaba para señalar los objetos CommandBar
o MenuBar vacíos en Pocket PC.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar::DrawMenuBar
Cambia la posición y el diseño de la barra de comandos después de que se modifique un menú en la barra de comandos.

BOOL DrawMenuBar(
WORD wButton )
const;

Parámetros
En la tabla siguiente se describe el parámetro del método DrawMenuBar de CCommandBar (Clase).
wButton
Especifica el índice de base cero de la barra de menús en la barra de comandos.
Valor devuelto
true si se realizó correctamente; en caso contrario, false.
Comentarios
Llame siempre a este método después de modificar un menú en una barra de comandos.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::GetMenu
Recupera el identificador de un menú en la barra de comandos.

HMENU CommandBar_GetMenu();

Valores devueltos
El identificador del menú indica la correcta realización. NULL indica el error.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::Height
Recupera el alto de la barra de comandos en píxeles.

int Height();

Valor devuelto
Devuelve el alto de la barra de comandos en píxeles.
Comentarios
La barra de comandos ocupar una parte del área del cliente de la ventana principal de la aplicación; se puede llamar a esta
función como medio para determinar el tamaño real del área de cliente.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CCommandBar::InsertButton
Agrega uno o más botones a un control de barra de herramientas.

BOOL InsertButton(
int nButton,
LPTBBUTTON lpButton );

Parámetros
En la tabla siguiente se describen los parámetros del método InsertButton de CCommandBar (Clase).
nButton
Especifica el índice de base cero de un botón. Este método inserta el nuevo botón a la izquierda de este botón.
lpButton
Especifica la dirección de una estructura TBUTTON que contiene información sobre el botón que se va a insertar.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
El puntero lpButton señala una estructura TBUTTON.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::InsertComboBox
Inserta un cuadro combinado en la barra de comandos.

CComboBox* InsertComboBox(
int nWidth,
DWORD dwStyle,
WORD wComboBoxID,
WORD wButton );

Parámetros
En la tabla siguiente se describen los parámetros del método InsertComboBox de CCommandBar (Clase).
nWidth
Especifica el ancho en píxeles del cuadro combinado.
dwStyle
Especifica qué estilos de ventana se aplican al cuadro combinado. Los estilos WS_VISIBLE y WS_CHILD se aplican
automáticamente. Los estilos predeterminados son CBS_DROPDOWNLIST y WS_SCROLL.
wComboBoxID
Especifica el identificador del cuadro combinado.
wButton
Especifica el índice de base cero de un botón en la barra de comandos.
Valores devueltos
Un puntero al menú identificado por wComboBoxID si se realiza correctamente; en caso contrario, null.
Comentarios
Este método inserta el cuadro combinado a la izquierda del botón identificado por wButton.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::InsertMenuBar
Inserta una barra de menús en la barra de comandos.

BOOL InsertMenuBar(
WORD wMenuID,
WORD wButton );

Parámetros
En la tabla siguiente se describen los parámetros del método InsertMenuBar de CCommandBar (Clase).
wMenuID
Especifica el identificador de recursos de MenuBar.
wButton
Especifica el índice de base cero de un botón en la barra de comandos.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
Este método coloca MenuBar en la posición del botón indicada por wButton.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::InsertSeparator
Inserta un botón separador en la barra de comandos.

BOOL InsertSeparator(
int nWidth = 6,
WORD wButton );

Parámetros
En la tabla siguiente se describen los parámetros del método InsertSeparator de CCommandBar (Clase).
nWidth
Especifica el ancho en píxeles del botón separador.
wButton
Especifica el índice de base cero de un botón de la barra de comandos que es mayor o igual que cero y menor que el número
de botones de la barra. CMDBAR_END especifica el final de CommandBar.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Comentarios
Este método coloca el separador en la posición del botón indicada por wButton. Un separador no recibe datos proporcionados
por el usuario.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CCommandBar::Show
Muestra u oculta la barra de comandos.

BOOL Show(BOOL bShow)

Parámetros
En la tabla siguiente, se describe el parámetro del método Show de CCommandBar (Clase).
bShow
Valor booleano que especifica si se va a mostrar u ocultar la barra de comandos. Establezca este parámetro en false para
mostrar la barra de comandos, o en true para ocultarlo.
Valor devuelto
Devuelve el estado de la presentación anterior de CCommandBar. Devuelve true si se muestra la barra de comandos y false
si se oculta.
Comentarios
Las barras de comandos se crean con el estado de presentación establecido en true. Para ocultar la barra de comandos, llame
a Show(false).
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CCommandBar (Métodos)
Otros recursos
MFC única para clases de dispositivos
CCeCommandBar
Desarrollo para Smart Device

CDocList (Clase)
Utilice CDocList para mostrar listas de documentos de forma coherente. La clase CDocList encapsula la implementación del
sistema operativo del tipo de ventana DocList, con funciones adicionales para la integración con una arquitectura
documento/vista de MFC.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Otros recursos
MFC única para clases de dispositivos
CDocList (Métodos)
CCeDocList
Desarrollo para Smart Device

CDocList (Métodos)
A continuación se enumeran los métodos de CDocList (Clase) que encapsula la implementación del sistema operativo del tipo
de ventana DocList.

CDocList::CDocList Crea un objeto CDocList.

CDocList::Create Crea e inicializa la lista asociada al objeto CDocList.

CDocList::DeleteSelection Elimina los elementos seleccionados.

CDocList::DisableUpdate Deshabilita la actualización de CDocList.

CDocList::EnableUpdate Habilita la actualización de CDocList.

CDocList::GetFilterIndex Obtiene la selección de filtros de archivo actuales, por ejemplo, para establecer el filtro actual par
a un cuadro combinado.

CDocList::GetItemCount Obtiene un recuento de elementos.

CDocList::GetNextItem Obtiene el elemento siguiente de CDocList.

CDocList::GetNextWaveFile Selecciona el archivo .wav siguiente.

CDocList::GetPrevWaveFile Selecciona el archivo .wav anterior.

CDocList::GetSelectCount Obtiene el número de elementos seleccionados.

CDocList::GetSelectedPathna Obtiene el nombre de la ruta de acceso asociado al elemento seleccionado.


me

CDocList::ReceiveIR Recibe las señales infrarrojas.

CDocList::Refresh Actualiza CDocList.

CDocList::RenameMoveSele Muestra el cuadro de diálogo Cambiar nombre o mover para los elementos seleccionados.
ctedItems

CDocList::SelectItem Selecciona el elemento asociado a la ruta de acceso.

CDocList::SendEMail Envía el correo electrónico.

CDocList::SendIR Envía las señales infrarrojas.

CDocList::SetFilterIndex Indica que se ha cambiado el filtro de archivo; por ejemplo, el usuario ha cambiado valores en un
cuadro de diálogo Opciones.

CDocList::SetFolder Establece una carpeta.

CDocList::SetItemState Cambia el estado de un elemento en CDocList.

CDocList::SetSelectedPathna Hace que el elemento asociado a la ruta de acceso se seleccione durante la siguiente actualizació
me n.
CDocList::SetSelection Selecciona un elemento por índice.

CDocList::SetSortOrder Ordena CDocList.

CDocList::Update Actualiza CDocList pero no restaura la selección.

CCeDocList pasa a denominarse CDocList (Clase) en MFC 8.0. A continuación se muestra código de una aplicación de MFC 3.0:

CCommandBar* pDocListCB = pDocList->GetCommandBar();

Este código genera el error siguiente:


MainFrm.cpp (115): error C2039: 'GetCommandBar': no es un miembro de 'CDocList'
En MFC 8.0 se debe crear, en su lugar, una instancia de CDocListCommandBar.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::CDocList
Crea una instancia de un objeto CDocList.

CDocList();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::Create
Crea e inicializa la lista asociada al objeto CDocList.

BOOL Create (
CWnd* pParentWnd,
LPCTSTR lpszFilterList,
LPCTSTR lpszFolder,
DWORD dwFlags = DLF_SHOWEXTENSION ) ;

Parámetros
En la tabla siguiente se describen los parámetros del método Create de CDocList (Clase).
Parámetro Descripción
pParentWnd Puntero a la ventana primaria: necesario.

lpszFilterList Puntero a la lista de filtros; una barra vertical (|) delimita la lista y finaliza con ||\0.

lpszFolder Puntero a la carpeta.

dwFlags DLF_SHOWEXTENSION es el único valor permitido en la versión actual.


Valores devueltos
true si la lista se crea y se muestra correctamente; de lo contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::DeleteSelection
Elimina los elementos seleccionados.

HRESULT DeleteSelection();

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::DisableUpdate
Deshabilita la actualización de doclist.

void DisableUpdate();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::EnableUpdate
Habilita la actualización de doclist.

void EnableUpdate();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::GetFilterIndex
Obtiene la selección de filtro de archivo actual.

int GetFilterIndex();

Valor devuelto
El índice de la lista de filtros delimitada por barras verticales (|) para la selección de filtro actual. El índice no es de base cero,
sino de base uno.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::GetItemCount
Obtiene el recuento de elementos.

int GetItemCount();

Valor devuelto
El número de documentos de la lista de documentos.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::GetNextItem
Obtiene el siguiente elemento de la lista de documentos.

int GetNextItem(
int nStart,
UINT nFlags );

Parámetros
En la tabla siguiente se describen los parámetros del método GetNextItem de CDocList (Clase).
Parám Descripción
etro
nStart Especifica el número del elemento en la lista de documentos para iniciar la búsqueda.

nFlags Especifica la relación geométrica del elemento solicitado con el elemento especificado y el estado del elemento solicita
do. La relación geométrica puede ser uno de estos valores:
Valor Descripción
LVNI_ABOVE Busca un elemento que está encima del elemento especificado.

LVNI_ALL Busca un elemento subsiguiente por índice, el valor predeterminado.

LVNI_BELOW Busca un elemento que está debajo del elemento especificado.

LVNI_TOLEFT Busca un elemento a la izquierda del elemento especificado.

LVNI_TORIGHT Busca un elemento a la derecha del elemento especificado.

Además, se puede especificar el estado del elemento, que puede ser cero, o puede ser uno o más de los valores siguie
ntes:
Valor Descripción
LVNI_DROPHILITED El elemento tiene establecido el indicador de estado LVIS_DROPHILITED.

LVNI_FOCUSED El elemento tiene establecido el indicador de estado LVIS_FOCUSED.

LVNI_SELECTED El elemento tiene establecido el indicador de estado LVIS_SELECTED.

Comentarios
Si un elemento no tiene establecidos todos los indicadores de estado especificados, la búsqueda continúa con el siguiente
elemento.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::GetNextWaveFile
Obtiene el archivo .wav siguiente.

BOOL GetNextWaveFile(
int* pnItem );

Parámetros
En la tabla siguiente se describe el parámetro del método GetNextWaveFile de CDocList (Clase).
Parámetro Descripción
pnItem Puntero al archivo .wav siguiente de la lista.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::GetPrevWaveFile
Obtiene el archivo .wav anterior.

BOOL GetPrevWaveFile(
int* pnItem );

Parámetros
En la tabla siguiente se describe el parámetro del método GetPrevWaveFile de CDocList (Clase).
Parámetro Descripción
pnItem Puntero al archivo .wav anterior de la lista.
Valor devuelto
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::GetSelectCount
Obtiene el número de elementos seleccionados.

int GetSelectCount();

Valor devuelto
El número de elementos seleccionados en la lista de documentos.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::GetSelectedPathname
Obtiene la ruta de acceso asociada al elemento seleccionado.

BOOL GetSelectedPathname(
LPTSTR pszPath,
WORD nSize );

Parámetros
En la tabla siguiente se describen los parámetros del método GetSelectedPathname de CDocList (Clase).
pszPath
Puntero a la ruta de acceso del elemento seleccionado en la lista de documentos.
nSize
Especifica la longitud, en caracteres, del búfer que recibe la ruta de acceso.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::ReceiveIR
Se utiliza para recibir información sobre infrarrojos.

void ReceiveIR(
LPTSTR pszPath );

Parámetros
En la tabla siguiente se describe el parámetro del método ReceiveIR de CDocList (Clase).
pszPath
Puntero a la cadena que contiene la ruta de acceso.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::Refresh
Actualiza la lista de documentos.

BOOL Refresh();

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::RenameMoveSelectedItems
Muestra el cuadro de diálogo Cambiar nombre o mover para los elementos seleccionados.

BOOL RenameMoveSelectedItems();

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::SelectItem
Hace que se seleccione el elemento asociado a la ruta de acceso.

HRESULT SelectItem(
LPTSTR pszPath,
BOOL fVisible );

Parámetros
En la tabla siguiente se describen los parámetros del método SelectItem de CDocList (Clase).
Parámetro Descripción
pszPath Puntero a la cadena que contiene la ruta de acceso.

fVisible Indica si el documento es visible o no.


Valor devuelto
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SendEMail
Se utiliza para enviar el correo electrónico.

void SendEMail(
LPTSTR pszPath );

Parámetros
En la tabla siguiente se describe el parámetro del método SendEMail de CDocList (Clase).
Parámetro Descripción
pszPath Puntero a la cadena que contiene la ruta de acceso.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SendIR
Se utiliza para enviar información sobre infrarrojos.

void SendIR(
LPTSTR pszPath );

Parámetros
En la tabla siguiente se describe el parámetro del método SendIR de CDocList (Clase).
Parámetro Descripción
pszPath Puntero a la cadena que contiene la ruta de acceso.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SetFilterIndex
Indica que se ha cambiado un filtro de archivo.

HRESULT SetFilterIndex(
int nIndex );

Parámetros
En la tabla siguiente se describe el parámetro del método SetFilterIndex de CDocList (Clase).
Parámetro Descripción
nIndex Índice de la lista de filtros delimitada por barras verticales (|). El índice no es de base cero, sino de base uno.
Valor devuelto
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SetFolder
Establece una carpeta.

void SetFolder(
LPTSTR pszFolder );

Parámetros
En la tabla siguiente se describe el parámetro del método SetFolder de CDocList (Clase).
Parámetro Descripción
pszFolder Puntero a la cadena que contiene el nombre de la carpeta.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SetItemState
Cambia el estado de un elemento en la lista de documentos.

BOOL SetItemState(
int nItem,
UINT nState,
UINT nStateMask );

Parámetros
En la tabla siguiente se describen los parámetros del método SetItemState de CDocList (Clase).
Parámetro Descripción
nItem Numero de índice para el elemento.

nState Especifica los valores de los estados que se van a cambiar.

nStateMask Especifica qué estados se van a cambiar.


Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SetSelectedPathname
Hace que el elemento asociado a la ruta de acceso se seleccione durante la siguiente actualización.

void SetSelectedPathname(
LPTSTR pszPath );

Parámetros
En la tabla siguiente se describe el parámetro del método SetSelectedPathname de CDocList (Clase).
Parámetro Descripción
pszPath Puntero a la cadena que contiene la ruta de acceso.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::SetSelection
Selecciona un elemento por índice.

BOOL SetSelection(
int wItem );

Parámetros
En la tabla siguiente se describe el parámetro del método SetSelection de CDocList (Clase).
Parámetro Descripción
wItem Numero de índice para el elemento.
Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocList::SetSortOrder
Ordena la lista de documentos. El criterio de ordenación siempre es ascendente.

BOOL SetSortOrder();

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocList::Update
Actualiza la lista de documentos pero no restaura la selección.

HRESULT Update();

Valores devueltos
true si se realizó correctamente; en caso contrario, false.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Referencia
CDocList (Clase)
Otros recursos
MFC única para clases de dispositivos
CCeDocList
Desarrollo para Smart Device

CDocListDocTemplate (Clase)
Esta clase es un perfeccionamiento del tipo de aplicación de SDI facilitado por CSingleDocTemplate Class. El uso de esta clase
permite a una aplicación existir en modo DocList cuando no hay ningún documento abierto.
Después de agregar este tipo de documento a la aplicación, se ha de llamar al miembro de ShowDocList para crear
inicialmente una instancia de la clase CDocList.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

CDocListDocTemplate (Métodos)
CDocListDocTemplate (Clase) es una clase similar a la clase CDocListDocTemplate de escritorio que es un perfeccionamiento
del tipo de aplicación de SDI.
Esta clase permite que una aplicación exista en modo de documento cuando no hay ningún documento presente.
Después de agregar este tipo de documento a la aplicación, llame al miembro ShowDocList para crear una instancia de
CDocList.
En esta sección
CDocListDocTemplate::CDocListDocTemplate
Crea un objeto CDocListDocTemplate.
CDocListDocTemplate::ShowDocList
Muestra la lista de documentos. CDocList se crea automáticamente cuando se llama a
CDocListDocTempate::ShowDocList.
Vea también
Otros recursos
MFC única para clases de dispositivos
CCeDocListDocTemplate
Desarrollo para Smart Device

CDocListDocTemplate::CDocListDocTemplate
Crea un objeto CDocListDocTemplate. El uso de esta clase permite asignar dinámicamente un objeto
CDocListDocTemplate y pasarlo a CWinApp::AddDocTemplate desde el método InitInstance de la clase de aplicación.

CDocListDocTemplate(
UINT nIDResource,
CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass,
CRuntimeClass* pViewClass,
LPCTSTR lpszFilterList,
LPCTSTR lpszFolder );

Parámetros
En la tabla siguiente se describen los parámetros del método CDocListDocTemplate de CDocListDocTemplate (Clase).
Pará Descripción
metr
o
nIDRe Especifica el identificador de los recursos utilizados con el tipo de documento. Pueden ser recursos de menú, icono, tabl
sourc a de aceleradores y cadena.
e

pDoc Puntero al objeto CRuntimeClass de la clase de documento. Esta clase es una clase derivada de CDocument que se de
Class fine para representar los documentos.

pFra Puntero al objeto CRuntimeClass de la clase de ventana de marco. Esta clase puede ser una clase derivada de CFrame
meCl Wnd o puede ser CFrameWnd si se desea el comportamiento predeterminado para la ventana de marco principal.
ass

pView Puntero al objeto CRuntimeClass de la clase de vista. Esta clase es una clase derivada de CView que se define para mo
Class strar los documentos.

lpszFil Puntero a la lista de filtros; una barra vertical (|) delimita la lista y finaliza con ||\0.
terList

lpszFo Puntero a la carpeta.


lder
Comentarios
Para obtener más información, vea CDocListDocTemplate.
Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxext.h.
Vea también
Otros recursos
MFC única para clases de dispositivos
CCeDocListDocTemplate
Desarrollo para Smart Device

CDocListDocTemplate::ShowDocList
Se utiliza como una llamada desde CWinApp::InitInstance para mostrar inicialmente la lista de documentos.

virtual void ShowDocList();

Requisitos
Versiones de Windows CE 5.0 y posteriores.
Archivo de encabezado: declarado en Afxwin.h.
Vea también
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

AfxEnableDRA
Esta función habilita el conocimiento de la resolución de dispositivos en los proyectos de aplicaciones de dispositivos.

void AfxEnableDRA(BOOL bEnable);

Parámetros
bEnable
Al especificar TRUE, se habilita el conocimiento de la resolución de dispositivos; al especificar FALSE o al no llamar a la
función, se deshabilita dicho conocimiento.
Comentarios
Esta característica permite a la aplicación responder a los cambios que se producen en la resolución en tiempo de ejecución,
como el cambio del modo vertical al modo horizontal.
Utilice la función AfxEnableDRA() cuando cree directamente instancias de CDialog. En esta situación, se utiliza el método
OnSize definido en dlgcore.cpp e implementado en LIB y DLL de MFC. En estas versiones de la biblioteca, se utiliza
AfxIsDRAEnabled() para realizar una comprobación en tiempo de ejecución con el fin de determinar si se va a llamar a
DRA::RelayoutDialog(...). AfxIsDRAEnabled() devuelve true únicamente si se ha llamado anteriormente a
AfxEnableDRA(TRUE).
Nota
Cuando utiliza asistentes para crear un proyecto de MFC para dispositivos, el código generado implementa un reemplazo (C
Dialog::OnSize(int, int)) para las clases derivadas de CDialog. El conocimiento de la resolución de dispositivos se comprue
ba en tiempo de compilación y se adopta la decisión de llamar o no a DRA::RelayoutDialog(...).

Ejemplo
AfxEnableDRA(TRUE); //Enable Device Resolution Awareness
...
void CDialog::OnSize(UINT nType, int cx, int cy)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
m_lpszWideTemplateName : m_lpszTemplateName);
}
else
{
CWnd::OnSize(nType, cx, cy);
}
}

Vea también
Otros recursos
MFC única para clases de dispositivos
Desarrollo para Smart Device

Referencia de la biblioteca en tiempo de ejecución de C para


dispositivos
La biblioteca en tiempo de ejecución de Microsoft C para dispositivos admite un subconjunto de las funciones que están
disponibles en la biblioteca en tiempo de ejecución de Microsoft C completa para el escritorio.
La admisión de sólo un subconjunto de la biblioteca completa permite que las aplicaciones se ejecuten en dispositivos con
recursos más limitados que los equipos de escritorio. Para obtener más información sobre cómo filtrar los temas de ayuda
sobre referencias de la biblioteca en tiempo de ejecución para dispositivos, vea Cómo: Encontrar la Ayuda para los métodos y
clases MFC compatibles con dispositivos y Cómo: Encontrar la Ayuda para los métodos y clases ATL compatibles con
dispositivos.
Biblioteca en tiempo de ejecución de C
Para obtener la documentación completa de la biblioteca en tiempo de ejecución de C para dispositivos, vea Biblioteca en
tiempo de ejecución de Microsoft C para Windows CE.
API seguras
Se han agregado las siguientes API para proyectos de dispositivos en Visual Studio 2005.

wcsncpy_s wcscpy_s wcscat_s

strncpy_s strcpy_s strcat_s

memmove_s memcpy_s _wsplitpath_s

_wmakepath_s _ultoa_s _ui64tow_s

_ui64toa_s _ltoa_s _localtime64_s

_itow_s _itoa_s _i64tow_s

_i64toa_s _gmtime64_s

Vea también
Otros recursos
Referencia (dispositivos)
Desarrollo para Smart Device

Referencia de la Biblioteca estándar de C++ para dispositivos


La versión del dispositivo de la biblioteca estándar de C++ es un subconjunto del Standard C++ Library Reference completo.
Nueva funcionalidad
La compatibilidad con la transmisión en secuencias se ha agregado a esta versión de la biblioteca estándar de C++.
Funcionalidad incompatible
La biblioteca estándar de C++ para dispositivos no incluye la compatibilidad con la configuración regional.
uncaught_exception sólo se admite en Windows CE 5.0 y versiones superiores, incluso en las plataformas de Windows
Mobile 2005.
Encabezados no compatibles
La versión de dispositivos de la biblioteca estándar de C++ no admite los encabezados siguientes:
<cerrno>
<csignal>
<locale>
Vea también
Otros recursos
Referencia (dispositivos)
Visual C++ Libraries Reference
Smart Device Development

Compilers for Smart Devices


Compilers for Smart Devices
Visual Studio 2005 includes the following compilers that target microprocessors used in smart devices:
A 32-bit C/C++ compiler used to compile and link 32-bit ARM C and C++ programs.
A 32-bit C/C++ compiler used to compile and link 32-bit Renesas SH-4 C and C++ programs.
A C/C++ compiler used to compile and link MIPS16, MIPS32, MIPS64 C and C++ programs.
The compilers produce Common Object File Format (COFF) object files.
In This Section
Supported Device Microprocessors
List the microprocessor families that device compilers support.
Differences Between Desktop and Device Compilerss
Provides reference information about compiler options, intrinsic functions, and predefined macros. In addition, describes
differences in data alignment and Structured Exception Handling that may be important when programming for smart
devices.
ARM Family Processors
Provides information about ARM technology compiler options, intrinsic functions, and call specifications.
Renesas Family Processors
Provides information about Renesas technology compiler options, intrinsic functions, and call specifications.
MIPS Family Processors
Provides information about MIPS technology compiler options, intrinsic functions, and call specifications.
Related Sections
Online Help for Smart Device Projects
Describes Visual Studio 2005 support for smart device programming.
Smart Device Development

Supported Device Microprocessors


Supported Device Microprocessors
The device compilers support a wide variety of microprocessors used for devices. Support includes compilers, intrinsic
functions that allow full optimization, and assemblers for tasks that cannot be supported in other ways.
Supported Microprocessors
The following list shows supported microprocessor families:
ARM licensed technologies for architectures v4, v4T, Thumb, v5TE, and Intel XScale
For information about ARM-licensed microprocessors, see ARM Web site.
For information about ARM-licensed Intel microprocessors, see Intel Web site.
Renesas SuperH SH4 microprocessors
For information about Renesas microprocessors, see Renesas Web site.
MIPS licensed technologies developed by NEC, Toshiba, Philips Semiconductor, Integrated Device Technologies, LSI
Logic, and Quantum Effect Design
For information about MIPS-licensed technologies, see MIPS Web site
For information about MIPS-licensed NEC microprocessors, see NEC Web site
For information about MIPS-licensed Toshiba microprocessors, see Toshiba Web site
For information about MIPS-licensed Phillips Semiconductor microprocessors, see Philips Semiconductor Web
site
See Also
Other Resources
Differences Between Desktop and Device Compilers
Smart Device Development

Differences Between Desktop and Device Compilers


Differences Between Desktop and Device Compilers
The following topics provide descriptions of the differences between desktop and device compiler operation, including detailed
reference information about intrinsic functions and compiler errors.
In This Section
Unique Build Options

Describes build options uniquely defined for device compilers,


Shared Build Options
Lists build options shared with desktop compilers.
Intrinsic Functions for Device Compilers
Provided detailed reference information about the intrinsic functions common to all device compilers.
Pre-defined Macros
Provides reference information about macros included with device compilers.
RISC Processor Data Alignment
Provides programmer information about data alignment issues that vary across different microprocessors.
Exception Handling for Device Compilers
Describes the unique ways RISC-based microprocessor compilers manage exception handling.
Device Compiler Error Messages
Provides information about compiler and linker error messages that you might encounter when working with device
compilers.
Related Sections
ARM Family Processors
Provides information about ARM technology compiler options, intrinsic functions, and call specifications.
Renesas Family Processors

Provides information about Renesas technology compiler options, intrinsic functions, and call specifications.
MIPS Family Processors
Provides information about MIPS technology compiler options, intrinsic functions, and call specifications.
Smart Device Development

Unique Build Options


Unique Build Options
Nearly all of the build options offered for desktop compilers are also available for device compilers, and are implemented in
identical ways. Linker option implementation is identical in both environments.
For a list compiler options that are common to both desktop compilers and device compilers, see Shared Build Options.
The following table shows compiler options that support device compilers in a way that differs significantly from desktop
implementations.
Option Description
/callcap - Enable callcap profiling Inserts callcap profiling hooks at the beginning and end of each function.

/GS - Enable Security Checks Enables stack checking to detect buffer overrun attacks.

In addition, each supported microprocessor family has processor-specific compiler options that implement unique
functionality.
See Also
Reference
ARM Compiler Options
Renesas Compiler Options
MIPS Compiler Options
Smart Device Development

/callcap - Enable callcap profiling


/callcap - Enable callcap profiling
The /callcap option causes the compiler to insert calls to profiling hooks at the beginning and end of each function.
You must compile profiling hooks without the /callcap switch. If you compile the profiling hook functions with the /callcap
switch, the functions will perform infinite recursive calls to themselves.
The following code example, callcaphooks.c, shows a profiling hook function, _CAP_Enter_Function, for compilation without
callcap.
The /callcap switch inserts calls to the profiling hooks for all functions compiled with the /callcap compiler switch.

int main()
{
double d0 = 2.0, d1 = 4.0, result;
// No profiling for printf, because the library
// function is not compiled with /callcap.
printf("\n");
// callcap profiling hooks are called
// after the function is entered and before
// leaving it.
// The following example shows how to insert profiling hooks.
// File: callcaphooks.c

#include <stdio.h>
int main();
void _CAP_Enter_Function(void *p)
{
if (p != main)
printf("Enter function (at address %p) at %d\n",
p, GetTickCount());
return;
}
void _CAP_Exit_Function(void *p)
{
if (p != main)
printf("Leaving function (at address %p) at %d\n",
p, GetTickCount());
return;
}

See Also
Concepts
Unique Build Options
Smart Device Development

/GS - Enable Security Checks


/GS - Enable Security Checks
When you build with the /GS build option on, the compiler attempts to detect any direct buffer overruns into the return
address. When a buffer overrun overwrites a return address, it provides an opportunity to exploit code that does not enforce
buffer size restrictions.
The following sample overruns a buffer. It displays a message box and terminates the process when built with /GS.

#include <cstring>

// Vulnerable function
void vulnerable(const char *str)
{
char buffer[10];
strcpy(buffer, str); // overrun buffer !!!
}

int main()
{
// declare buffer that is bigger than expected
char large_buffer[] = "This string is longer than 10 characters!!!";
vulnerable(large_buffer);
}

Remarks
Buffer overruns are more easily exploited on machines, such as x86, with calling conventions that pass the return address of
function calls on the stack.
To prevent buffer overrun exploitation when a function is compiled with /GS, the compiler identifies functions that might be
subject to buffer overrun problems, and inserts a security cookie on the stack before the associated return address. If, on
function exit, the security cookie has changed, then the compiler reports an error and terminates the process.
When working on smart devices, however, the security cookie can become an issue. If an EXE or DLL that does not use one of
the default CRT entry points, but instead calls _cinit through CRT startup code, the compiler will report an error because _cinit
resets the expected value of the security cookie. If _cinit changes the value of the security cookie, the compiler falsely detects a
buffer overrun, reports the error, and terminates the process.
To avoid this issue:
Do not use arrays or _alloca in any functions that call _cinit.
Initialize the CRT normally with a default entry point, such as WinMainCRTStartup or _DllMainCRTStartup.
/GS does not protect against all buffer overrun security attacks. For example, buffer overrun attacks are still possible by
overwriting into the parameters area.
Even if you use /GS, you should strive to write secure code. That is, make sure that your code has no buffer overruns. You can
inject security checks into compiled code by enforcing buffer size restrictions.
See Also
Other Resources
Differences Between Desktop and Device Compilers
Smart Device Development

Shared Build Options


Shared Build Options
The following table shows options that are supported by all supported compilers, including those that target desktop
workstations and smart devices. For additional documentation on these options, see the Visual C++ reference in Visual Studio
.NET combined documentation.

/? /c (Compile Without Linking) /C (Preserve Comments During Preprocessin


g))

/D (Preprocessor Definitions) /E (Preprocess to stdout) /EH (Exception Handling Model)

/EP (Preprocess to stdout Without #line Direc /F (Set Stack Size) /FA, /Fa (Listing File)
tives)

/Fd (Program Database File Name) /Fe (Name EXE File) /FI (Name Forced Include File)

/Fm (Name Mapfile) /Fo (Object File Name) /Fp (Name .pch File)

/FR, /Fr (Create .sbr File) /GF (Eliminate Duplicate Strings)) /GL (Whole Program Optimization)

/GR (Enable Run-Time Type Information) /GX (Enable Exception Handling) /Gy (Enable Function-Level Linking)

/GZ (Enable Stack Frame Run-Time Error Che /H (Restrict Length of External Na /HELP (Compiler Command-Line Help)
cking) mes)

/I (Additional Include Directories) /J (Default char Type Is unsigned) /link (Pass Options to Linker)

/MD, /MT, /LD (Use Run-Time Library) /nologo (Suppress Startup Banne /O1, /O2 (Minimize Size, Maximize Speed)
r) (C/C++)

/Ob (Inline Function Expansion) /Od (Disable (Debug)) /Og (Global Optimizations)

/Oi (Generate Intrinsic Functions) /Os, /Ot (Favor Small Code, Favor /Ox (Full Optimization)
Fast Code)

/P (Preprocess to a File) /RTC (Run-Time Error Checks) /showIncludes (List Include Files)

/Tc, /Tp, /TC, /TP (Specify Source File Type) /U, /u (Undefine Symbols) /V (Version Number)

/vd (Disable Construction Displacements) /vmb, /vmg (Representation Meth /vmm, /vms, /vmv (General Purpose Represe
od) ntation)

/w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won ( /WL (Enable One-Line Diagnostic /Wp64 (Detect 64-Bit Portability Issues)
Warning Level) s)

/X (Ignore Standard Include Paths) /Y (Precompiled Headers) /Yc (Create Precompiled Header File)

/Yd (Place Debug Information in Object File) /Yu (Use Precompiled Header File /YX (Automatic Use of Precompiled Headers)
)

/Z7, /Zd, /Zi, /ZI (Debug Information Format) /Za, /Ze (Disable Language Extens /Zc (Conformance)
ions)
/Zg (Generate Function Prototypes) /Zl (Omit Default Library Name) /Zm (Specify Precompiled Header Memory Al
location Limit)

/Zp (Struct Member Alignment) /Zs (Syntax Check Only) ..


See Also
Reference
ARM Compiler Options
Renesas Compiler Options
MIPS Compiler Options
Smart Device Development

Intrinsic Functions for Device Compilers


Intrinsic Functions for Device Compilers
The device compilers support a wide variety of intrinsic functions. Some intrinsic functions are supported by all device
compilers. In addition, the compilers for each microprocessor family support additional intrinsic functions.
Common intrinsic functions perform simple and useful operations that are difficult to express concisely in C or C++. They are
called common because all device compilers support them.
Using intrinsic functions to access assembly instructions instead of inline assembly results in code that can still be fully
optimized by the compiler. All of the intrinsic functions are permanent. Using them in #pragma function generates an error
message during compilation.
You can enable these functions by including Cmnintrin.h.
In This Section
Common Intrinsic Functions for Device Compilers
Provides reference information about intrinsic functions supported for device compilers.
Intrinsic Forms of CRT Functions
Provides reference information about CRT functions that are supported as intrinsic functions by the device compilers.
Unsupported Intrinsic Functions
Lists the intrinsic functions that are supported by desktop compilers, but not supported by device compilers.
Macros for Common Intrinsics
Provided detailed reference information about macros that assist with processor-specific requirements.
Related Sections
Intrinsic Functions for ARM Microprocessors
Provides reference materials about intrinsic functions specifically defined for the ARM microprocessor compiler.
Intrinsic Functions for MIPS Microprocessors
Provides reference materials about intrinsic functions specifically defined for the MIPS microprocessor compiler.
Intrinsic Functions for Renesas Microprocessors
Provides reference materials about intrinsic functions specifically defined for the SH microprocessor compiler.
Smart Device Development

Common Intrinsic Functions for Device Compilers


Common Intrinsic Functions for Device Compilers
The following table shows intrinsic functions supported by all device compilers:

__assume _debugbreak __noop _CacheRelease

_CacheWriteBack _CopyFloatFromInt32 _CopyInt32FromFloat _CopyInt64FromDouble

_CountLeadingOnes, _CountLea _CountLeadingSigns, _CountLead _CountLeadingZeros, _CountLead _CountOneBits, _CountO


dingOnes64 ingSigns64 ingZeros64 neBits64

_ICacheRefresh _isunordered, _isunorderedf _MulHigh, _MulUnsignedHigh _prefetch

_ReadWriteBarrier, _WriteBarrier _ReturnAddress __trap MulDiv


See Also
Reference
Unsupported Intrinsic Functions
Intrinsic Forms of CRT Functions
Smart Device Development

_debugbreak
_debugbreak
This function causes a debug breakpoint exception to be inserted.

void __cdecl __debugbreak(void);

Parameters
None.
Return Values
None.
Remarks
The breakpoint transfers control to the exception handler.
Requirements
Routine Required header Architecture
_debugbreak <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_prefetch
_prefetch
This function loads the data cache from main memory, if possible.

void __cdecl __prefetch(


void *
);

Parameters
*
[in] Pointer to cache line.
Return Value
None.
Remarks
This function might do nothing if the requested functionality is not available on the target hardware platform.
Requirements
Routine Required header Architecture
_prefetch <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

__trap
__trap
This function inserts a trap instruction.

int __cdecl __trap(


arg1,
);

Parameters
arg1
[in] The trap number.
Return Value
The integer value provided by the trap handler. If the trap handler provides no return value, the return value is undefined.
Remarks
The compiler backend can enforce restrictions on the arguments, including the trap number, and can define a special calling
convention for the trap.
The interpretation of the trap number and the actions taken by the trap handler are not defined.
Requirements
Routine Required header Architecture
__trap <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CacheRelease
_CacheRelease
This function writes the cache line containing the address referenced by the pointer to main memory, and then marks the
cache line as empty.

void __cdecl __CacheRelease(


void *
);

Parameters
*
[in] Pointer to cache line.
Return Value
None.
Remarks
This function might do nothing if the requested functionality is not available on the target hardware platform.
Requirements
Routine Required header Architecture
_CacheRelease <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CacheWriteBack
_CacheWriteBack
This function writes the cache line containing the address referenced by the pointer to main memory.

void __cdecl __CacheWriteback(


void *
);

Parameters
*
[in] Pointer to cache line.
Return Value
None.
Remarks
This function might do nothing if the requested functionality is not available on the target hardware platform.
Requirements
Routine Required header Architecture
_CacheWriteBack <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_ICacheRefresh
_ICacheRefresh
This function releases the cache line containing the address referenced by the pointer from the instruction cache.

void __cdecl __ICacheRefresh(


void *
);

Parameters
*
[in] Pointer to cache line.
Return Value
None.
Remarks
The extent of the instruction cache refreshed is implementation-dependent. It is usually at least 16 bytes, but can be the entire
instruction cache. In addition, prefetch of the instructions referenced by the pointer is implementation-dependent.
This function is not supported for SH and MIPS microprocessors.
Requirements
Routine Required header Architecture
_ICacheRefresh <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_ReadWriteBarrier, _WriteBarrier
_ReadWriteBarrier, _WriteBarrier
_ReadWriteBarrier forces all previous memory accesses to complete before subsequent memory access is started.
_WriteBarrier forces all previous memory write operations to complete before any subsequent write operation is started.

void __cdecl _ReadWriteBarrier(void);


void __cdecl _WriteBarrier(void);

Parameters
None.
Return Value
None.
Remarks
_WriteBarrier is usually used for writing device drivers to make sure that a set of commands has been sent to the device
before further commands are issued. The compiler does not reschedule memory writes across an invocation of _WriteBarrier,
even on hardware platforms without explicit synchronization instructions.
_ReadWriteBarrier is usually used for writing device drivers to make sure that commands have been sent to the device before
status is read.
The compiler does not reschedule memory reads and writes across an invocation of _ReadWriteBarrier, even on hardware
platforms without explicit synchronization instructions.
Requirements
Routine Required header Architecture
_WriteBarrier <cmnintrin.h> x86, ARM, SH-4, MIPS

_ReadWriteBarrier <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_ReturnAddress
_ReturnAddress
This function provides the return address of the instruction in the calling function that will be executed after control returns to
the caller.

void _ReturnAddress(void);

Parameters
None.
Return Value
None.
Remarks
Build the program in the Example section, and step through it in the debugger.
As you step through the program, note the address that is returned from _ReturnAddress.
Then, immediately after returning from the function where _ReturnAddress was used, open the Disassembly window and
note that the address of the next instruction to be executed matches the address returned from _ReturnAddress.
Optimizations such as inlining can affect the return address.
For example, if the following sample program is compiled with /Ob (Inline Function Expansion) with n=1, inline_func is
inlined into the calling function, main. Therefore, the calls to _ReturnAddress from inline_func and main each produce the
same value.
Example
// compiler_intrinsics__ReturnAddress.cpp
#include <stdio.h>
// _ReturnAddress should be prototyped before use
#ifdef __cplusplus
extern "C"
#endif
void * _ReturnAddress(void);

#pragma intrinsic(_ReturnAddress)
__declspec(noinline)
void noinline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}

__forceinline
void inline_func(void)
{
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());
}
int main(void)
{
noinline_func();
inline_func();
printf("Return address from %s: %p\n", __FUNCTION__, _ReturnAddress());

return 0;
}

Requirements
Routine Required header Architecture
_ReturnAddress <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CopyDoubleFromInt64
_CopyDoubleFromInt64
This function copies a floating-point double long integer into a long integer register.

double _CopyInt64FromDouble(
__int64 arg1
);

Parameters
arg1
[in] The long integer argument that the function acts on.
Return Values
The floating-point double result of converting arg1.
Remarks
This function can be implemented by copying the source value using a temporary memory location.
Requirements
Routine Required header Architecture
_CopyDoubleFromInt64 <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CopyFloatFromInt32
_CopyFloatFromInt32
This function copies an integer value to a floating-point register.

float _CopyFloatFromInt32(
___int32 arg1
);

Parameters
arg1
[in] The integer value acted upon by the function.
Return Values
The floating point conversion of arg1.
Remarks
This function can be implemented by copying the source value using a temporary memory location.
Requirements
Routine Required header Architecture
_CopyFloatFromInt32 <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CopyInt32FromFloat
_CopyInt32FromFloat
This function copies a floating-point number into an integer register.

__int32 _CopyInt32FromFloat(
float arg1
);

Parameters
arg1
[in] The floating-point value acted upon by the function.
Return Values
The integer conversion of arg1.
Remarks
This function can be implemented by copying the source value using a temporary memory location.
Requirements
Routine Required header Architecture
_CopyInt32FromFloat <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CopyInt64FromDouble
_CopyInt64FromDouble
This function copies a floating-point double to a long integer register.

__int64 _CopyInt64FromDouble(
double arg1
);

Parameters
arg1
[in] The floating-point double argument acted on by the function.
Return Values
The long integer result of the conversion.
Remarks
This function can be implemented by copying the source value using a temporary memory location.
Requirements
Routine Required header Architecture
_CopyInt64FromDouble <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CountLeadingOnes, _CountLeadingOnes64
_CountLeadingOnes, _CountLeadingOnes64
This function returns the number of contiguous one bits starting with the most significant bit.

unsigned __cdecl _CountLeadingOnes(


long arg1
);

unsigned __cdecl _CountLeadingOnes64(


__int64 arg1
);

Parameters
arg1
[in] The long integer argument that the function examines to find one bits.
Return Values
The number of contiguous one bits in arg1. If all bits in arg1 are set, the return value of _CountLeadingOnes is 32, or the
value of _CountLeadingOnes64 is 64..
Remarks
This function can be implemented by calling a runtime function.
Requirements
Routine Required header Architecture
_CountLeadingOnes <cmnintrin.h> x86, ARM, SH-4, MIPS

_CountLeadingOnes64 <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CountLeadingSigns, _CountLeadingSigns64
_CountLeadingSigns, _CountLeadingSigns64
This function returns the number of contiguous bits that match the sign bit, starting with the next most significant bit.

unsigned __cdecl _CountLeadingSigns(


long arg1
);

unsigned __cdecl _CountLeadingSigns64(


__int64 arg1
);

Parameters
arg1
[in] The unsigned integer value that the function operates on.
Return Values
The number of contiguous bits in arg1 that match the sign bit.
Remarks
This function can be implemented by calling a runtime function.
Requirements
Routine Required header Architecture
_CountLeadingSigns <cmnintrin.h> x86, ARM, SH-4, MIPS

_CountLeadingSigns64 <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CountLeadingZeros, _CountLeadingZeros64
_CountLeadingZeros, _CountLeadingZeros64
This function returns the number of contiguous zero bits starting with the most significant bit in the argument.

unsigned __cdecl _CountLeadingZeros(


long arg1
);

unsigned __cdecl _CountLeadingZeros64(


__int64 arg1
);

Parameters
arg1
[in] The unsigned integer to be examined by the function.
Return Values
The number of contiguous zero bits in arg1. If none of the bits in arg1 are set, the return value is of _CountLeadingZeros is
32, or the value of _CountLeadingZeros64 is 64.
Remarks
This function can be implemented by calling a runtime function.
Requirements
Routine Required header Architecture
_CountLeadingZeros <cmnintrin.h> x86, ARM, SH-4, MIPS

_CountLeadingZeros <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_CountOneBits, _CountOneBits64
_CountOneBits, _CountOneBits64
This function returns the number of one bits in the argument.

unsigned __cdecl _CountOneBits(


long arg1
);

unsigned __cdecl _CountOneBits64(


__int64 arg1
);

Parameters
arg1
[in] The long integer value that the function examines for one bits.
Return Values
The number of one bits.
Remarks
This function can be implemented by calling a runtime function.
Requirements
Routine Required header Architecture
_CountOneBits <cmnintrin.h> x86, ARM, SH-4, MIPS

_CountOneBits64 <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_isunordered, _isunorderedf
_isunordered, _isunorderedf
_isunordered compares two double precision numbers to determine if they are unordered.
_isunorderedf compares two floating-point numbers to determine if they are unordered.

int __cdecl _isunordered(


double arg1,
double arg2
);

int __cdecl _isunorderedf(


float arg1,
float arg2
);

Parameters
arg1
[in] The value to be compared to arg2.
arg2
[in] The value to be compared to arg1.
Return Values
Returns a Boolean value.
TRUE indicates that arg1 and arg2 are unordered.
Remarks
IEEE-754 floating-point comparison can have four separate result values: less-than, equal-to, greater-than or unordered.
The first three conditions can be tested using normal C operators, and this function is used to test for the last condition.
Two values are unordered if either is a NaN. This means that a NaN is not equal to any value, even itself.
The C++ compiler returns a bool value instead of an int.
Requirements
Routine Required header Architecture
_isunordered <cmnintrin.h> x86, ARM, SH-4, MIPS

_isunorderedf <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

MulDiv
MulDiv
The MulDiv function multiplies two 32-bit values and then divides the 64-bit result by a third 32-bit value. The return value is
rounded up or down to the nearest integer.

int MulDiv(
int nNumber,
int nNumerator,
int nDenominator
);

Parameters
nNumber

[in] Multiplicand.
nNumerator
[in] Multiplier.
nDenominator
[in] Number by which the result of the multiplication (nNumber * nNumerator) is to be divided.
Return Values
If the function succeeds, the return value is the result of the multiplication and division. If either an overflow occurred or
nDenominator was 0, the return value is –1.
Requirements
Routine Required header Architecture
MulDiv <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_MulHigh, _MulUnsignedHigh
_MulHigh, _MulUnsignedHigh
This function returns the high-order 32-bit result of multiplying two arguments.

long __cdecl _MulHigh(


long arg1,
long arg2
);

unsigned long __cdecl _MulUnsignedHigh(


unsigned long arg1,
unsigned long arg2
);

Parameters
arg1
[in] The first argument in the product.
arg2
[in] The second argument in the product.
Return Values
The long integer result of multiplying arg1 and arg2.
Remarks
This function can be useful for detecting overflow. _MulHigh is useful for multiplying integers scaled to represent [-0.5..0.5),
and _MulUnsignedHigh is useful for multiplying integers scaled to represent 0..1).
Requirements
Routine Required header Architecture
_MulHigh <cmnintrin.h> x86, ARM, SH-4, MIPS

_MulUnsignedHigh <cmnintrin.h> x86, ARM, SH-4, MIPS


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

__assume
__assume
The __assume intrinsic function passes a hint to the optimizer.

__assume(expression)

Parameters
expression
Condition to be tested.
Return Value
None.
Remarks
The optimizer assumes that the condition represented by expression is true at the point where the keyword appears and
remains true until expression is altered (for example, by assignment to a variable). Selective use of hints passed to the
optimizer by __assume can improve optimization.
Example
//
// A common use of __assume tests the default case of a switch statement.
//
#ifdef DEGUG
# define ASSERT(e) ( ((e) || assert(__FILE__, __LINE__) )
#else
# define ASSERT(e) ( __assume(e) )
#endif

void gloo(int p)
{
switch(p){
case 1:
blah(1);
break;
case 2:
blah(-1);
break;
default:
__assume(0);
// This tells the optimizer that the default
// cannot be reached. Hence, no extra code
// is generated to check that 'p' has a value
// not represented by a case arm. This makes the switch
// run faster.
}
}

Requirements
Routine Required header Architecture
__assume <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

__noop
__noop
__noop gives you a function name to use when you want the function to be ignored and the argument list unevaluated.

__noop(functionname)

Parameters
Functionname
Name of function to be ignored
Return Value
None.
Example
// The following code shows how you could use __noop
// compile with or without /DDEBUG
#include <stdio.h>

#if DEBUG
#define PRINT printf
#else
#define PRINT __noop
#endif

void main() {
PRINT("\nhello\n");
}

Requirements
Routine Required header Architecture
__noop <cmnintrin.h> x86, ARM, SH-4, MIPS
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

Intrinsic Forms of CRT Functions


Intrinsic Forms of CRT Functions
The following table lists intrinsic forms of CRT functions that are supported by device compilers:

abs, _abs64 _alloca

_byteswap_uint64, _byteswap_ulong, _byteswap_ushort labs

_lrotl, _lrotr memcmp, wmemcmp

memcpy, wmemcpy memset, wmemset

_rotl, _rotl64, _rotr_rotr64 strcat, wcscat, _mbscat

strcmp, wcscmp, _mbscmp strcpy, wcscpy, _mbscpy

strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l _strset, _wcsset, _mbsset, _mbsset_l
Intrinsic Forms of Math Library Functions
The following table lists intrinsic forms of math library functions that are supported by device compilers:

acos asin atan atan

ceil, ceilf cos, cosf, cosh, coshf fmod, fmodf exp, log, and log

floor, floorf pow sin, sinf, sinh, sinhf sqrt

tan, tanf, tanh, tanhf . . .


See Also
Reference
Unsupported Intrinsic Functions
Common Intrinsic Functions for Device Compilers
Smart Device Development

Unsupported Intrinsic Functions


Unsupported Intrinsic Functions
Visual Studio desktop compilers for x86, AMD64, or Intel Itanium (IPF) architectures support the functions in the following list.
Device compilers do not support these intrinsic functions.

__break __cpuid

__dsrlz __faststorefence

__fc __fci

__fclrf __flushrs

__fsetc __fwb

__getCFS __getcx86, AMD64, IA64, IPFerseflags

__getPSP __getReg

__inbyte __inbytestring

__indword __indwordstring

__int2c __invalat

__invlpg __Inword, __inwordstring

__isNat __isrlz

__lfetch, __lfetch_excl, __lfetchfault, __lfetchfaultexcl __load128, __load128_acq

__movsb, __movsd,__movsq, __movsw __mul128

__mulh __outbyte

__outbytestring __outword

__outwordstring __ptcg, __ptcga

__ptcl __ptrcl, __ptri

__rdteb __rdtsc

__readcr0, __readcr2, __readcr3, __readcr4, __readcr8 __readfsbyte, __readfsdword, __readfsqword, __readfsword

__readgsbyte, __readgsdword, __readgsqword, __readgsword __readmsr

__readpmc __rsm

__rum __segmentlimit
__setReg __shiftleft128

__shiftright128 __ssm

__store128, __store128_rel __stosb, __stosd, __stosq, __stosw

__sum __synci

__writefsbyte, __writefsdword, __writefsqword, __writefsword __writegsbyte, __writegsdword, __writegsqword, __writegsword

__writemsr __yield

_AcquireSpinLock _AddressOfReturnAddress

_BitScanForward, _BitScanForward64 _BitScanReverse, _BitScanReverse64

_bittest, _bittest64 _bittestandcomplement,_bittestandcomplement64

_bittestandreset, _bittestandreset64 _bittestandset, _bittestandset64

_InterlockedAdd _InterlockedAddLargeStatistic

_InterlockedAnd _InterlockedAnd, _InterlockedAnd64

_interlockedbittestandreset, _interlockedbittestandreset64 _InterlockedCompare64Exchange

_InterlockedCompareExchange16 _InterlockedCompareExchange64

_InterlockedDecrement16 _InterlockedExchangePointer

_InterlockedIncrement16 _InterlockedOr

_InterlockedXor _ReadBarrier

_ReleaseSpinLock _thash

_ttag _umul128

_umulh _wbinvd

_writecr0, _writecr2, _writecr3, _writecr4, _writecr8, ..

The following table lists intrinsic forms of math library functions that are not supported by device compilers:

acosf acosl asinf

asinl atanf atanl

atan2f atan2l ceilf

ceill coshf coshl

cosf cosl expf


expl floorf floorl

fmodf fmodl logf

logl log10f log10l

powf powl sinf

sinl sinhf sinhl

sqrtf sqrtl tanf

tanl tanhf tanhl


See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

Macros for Common Intrinsics


Macros for Common Intrinsics
All microprocessor families that support common intrinsic functions have a machine-dependent description of support in the
header file, cmnintr.h. The machine-dependent description does the following:
Declares the functions with the correct prototype
Enables the intrinsic version
Defines macros that classify how the function is supported
You can use the intrinsic function unconditionally or you can use one of the macros to classify the intrinsic support in your CPU
environment.
The following table shows descriptions of the macros for common intrinsic functions.
Macro Description
_INTRINSIC_IS_HELPER This macro determines if an intrinsic function is instantiated through a call to the C Run-time Librar
y (CRT).

_INTRINSIC_IS_INLINE This macro tests to determine if the compiler can expand a specified intrinsic to one or more lines.

_INTRINSIC_IS_SAFE This macro determines if a specified intrinsic function is instantiated independent of the OS.

_INTRINSIC_IS_SUPPORT This macro determines if a specified intrinsic function is supported.


ED
See Also
Reference
Common Intrinsic Functions for Device Compilers
Smart Device Development

_INTRINSIC_IS_HELPER
_INTRINSIC_IS_HELPER
This macro determines if a specified intrinsic function is supported.

_INTRINSIC_IS_SUPPORTED(arg)

Parameters
Arg
The name of the intrinsic function of interest.
Return Value
A nonzero return value indicates that the specified intrinsic is supported by the compiler.
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_INTRINSIC_IS_INLINE
_INTRINSIC_IS_INLINE
This macro determines if a specified intrinsic function is supported.

_INTRINSIC_IS_SUPPORTED(arg)

Parameters
Arg
[in] The name of the intrinsic function of interest.
Return Value
A nonzero return value indicates that the specified intrinsic is supported by the compiler.
Example
// The followig example shows how to use the _INTRINSIC_IS_INLINE macro to determine if
the _rotl intrinsic will be expanded inline.
//
#include <cmnintrin.h>
#if _INTRINSIC_IS_INLINE(_rotl)
x = _rotl(y, 3);
#else
x = MY_ROTL(y, 3); // call my inline implementation, not the CRT helper
#endif

See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_INTRINSIC_IS_SAFE
_INTRINSIC_IS_SAFE
This macro determines if a specified intrinsic function is instantiated independent of the OS.

_INTRINSIC_IS_SAFE(arg)

Parameters
Arg
[in] The name of the intrinsic function of interest.
Return Value
A nonzero return value indicates that the specified intrinsic does require invocation of an OS feature.
Remarks
An intrinsic function expansion sometimes requires the compiler to invoke an operating system feature because the compiler
itself cannot perform the particular task. Because the compiler cannot control whether the OS provides the required feature,
such an intrinsic is considered unsafe.
For example, the __trap intrinsic assumes that an OS handler is available to take an action. The compiler cannot guarantee that
such a handler is present, so the __trap intrinsic is considered unsafe.
See Also
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_INTRINSIC_IS_SUPPORTED
_INTRINSIC_IS_SUPPORTED
This macro determines if an intrinsic function is instantiated through a call to the Microsoft C Run-Time Library (CRT).

_INTRINSIC_IS_HELPER(arg)

Parameters
Arg
[in] The name of the intrinsic function of interest.
Return Value
A nonzero return value indicates that intrinsic named by arg is instantiated with a call to the CRT.
Example
//
// The following example shows how to use the
// _INTRINSIC_IS_SUPPORTED macro to determine
// support for the __trap intrinsic function.
//
#include <cmnintrin.h>
#if INTRINSIC_IS_SUPPORTED(__trap)
__trap(1); // __trap IS SUPPORTED
#else
// __trap IS NOT SUPPORTED
#endif
//

See Also
Reference
Common Intrinsic Functions for Device Compilers
Smart Device Development

Pre-defined Macros
Pre-defined Macros
The device compilers recognize seven predefined ANSI C macros and the Microsoft C++ implementation provides several
more.
These macros take no arguments and cannot be redefined. Their value, except for __LINE__ and __FILE__, must be constant
throughout compilation.
The following table provides additional information about predefined macros, some of which are defined with multiple values.
Macro Description
__DATE_ The compilation date of the current source file.
_
The date is a string literal of the form Mmm dd yyyy.

__FILE__ The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks.

__FUNC Valid only within a function and returns the undecorated name of the enclosing function (as a string).
TION__
__FUNCTION__ is not expanded if you use /EP (Preprocess to stdout Without #line Directives) or /P (Preproce
ss to a File) compiler options.

__LINE_ The line number in the current source file.


_
The line number is a decimal integer constant. It can be altered with a #line directive.

__STDC_ Indicates full conformance with the ANSI C standard.


_
Defined as the integer constant 1 only if the /Za, /Ze (Disable Language Extensions) compiler option is given and
you are not compiling C++ code; otherwise is undefined.

__TIME_ The most recent compilation time of the current source file.
_
The time is a string literal of the form hh:mm:ss.

__TIMES The date and time of the last modification of the current source file, expressed as a string literal in the form Ddd Mm
TAMP__ m Date hh:mm:ss yyyy, where Ddd is the abbreviated day of the week and Date is an integer from 1 to 31.
Microsoft-specific Macros
The following table shows additional predefined macros that are Microsoft-specific.
_CHAR_UNSIGNED
Default char type is unsigned. Defined when /J (Default char Type Is unsigned) is specified.
__cplusplus
Defined for C++ programs only.
_CPPRTTI
Defined for code compiled with /GR (Enable Run-Time Type Information).
_CPPUNWIND
Defined for code compiled with /GX (Enable Exception Handling).
_MFC_VER
Defines the MFC version. Defined as 0x0600 for Microsoft Foundation Class Library 6.0 or later. Always defined.
_MSC_EXTENSIONS
This macro is defined when compiling with the /Za, /Ze (Disable Language Extensions) compiler option (the default). Its
value, when defined, is 1.
_MSC_VER
Defines the compiler version. Defined as 1200 for Microsoft Visual C++ 6.0 or later. Always defined.
_WIN32
Defined for applications for Win32. Always defined.
See Also
Other Resources
Differences Between Desktop and Device Compilers
Smart Device Development

RISC Processor Data Alignment


RISC Processor Data Alignment
Alignment of data is an important issue when porting or writing code on some target architectures, especially architectures
other than x86.
Depending on the architecture, unaligned operations with primitive data types can cause poor application performance, or can
cause your application to fault and terminate abnormally.
This section provides information to help you avoid such pitfalls.
In This Section
About Data Alignment
Describes how data alignment issues impact device programming.
Avoiding Alignment Errors

Provides guidelines for keeping primitive types properly aligned.


Working with Packing Structures
Describes how structure packing interacts with alignment.
__unaligned keyword
Provides reference information about using the __unaligned modifier to deal with alignment issues.
Smart Device Development

About Data Alignment


About Data Alignment
Many CPUs, such as those based on Alpha, IA-64, MIPS, and SuperH architectures, refuse to read misaligned data. When a
program requests that one of these CPUs access data that is not aligned, the CPU enters an exception state and notifies the
software that it cannot continue. On ARM, MIPS, and SH device platforms, for example, the operating system default is to give
the application an exception notification when a misaligned access is requested.
Misaligned memory accesses can incur enormous performance losses on targets that do not support them in hardware.
Alignment
Alignment is a property of a memory address, expressed as the numeric address modulo a power of 2. For example, the
address 0x0001103F modulo 4 is 3; that address is said to be aligned to 4n+3, where 4 indicates the chosen power of 2. The
alignment of an address depends on the chosen power of two. The same address modulo 8 is 7.
An address is said to be aligned to X if its alignment is Xn+0.
CPUs execute instructions that operate on data stored in memory, and the data are identified by their addresses in memory. In
addition to its address, a single datum also has a size. A datum is called naturally aligned if its address is aligned to its size, and
misaligned otherwise. For example, an 8-byte floating-point datum is naturally aligned if the address used to identify it is
aligned to 8.
Compiler handling of data alignment
Device compilers attempt to allocate data in a way that prevents data misalignment.
For simple data types, the compiler assigns addresses that are multiples of the size in bytes of the data type. Thus, the compiler
assigns addresses to variables of type long that are multiples of four, setting the bottom two bits of the address to zero.
In addition, the compiler pads structures in a way that naturally aligns each element of the structure. Consider the structure
struct x_ in the following code example:

struct x_
{
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
} MyStruct;

The compiler pads this structure to enforce alignment naturally.


Example
The following code example shows how the compiler places the padded structure in memory:

// Shows the actual memory layout


struct x_
{
char a; // 1 byte
char _pad0[3]; // padding to put 'b' on 4-byte boundary
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
char _pad1[1]; // padding to make sizeof(x_) multiple of 4
}

Both declarations return sizeof(struct x_) as 12 bytes.


The second declaration includes two padding elements:
char _pad0[3] to align the int b member on a four-byte boundary
char _pad1[1] to align the array elements of the structure struct _x bar[3];
The padding aligns the elements of bar[3] in a way that allows natural access.
The following code example shows the bar[3] array layout:

adr
offset element
------ -------
0x0000 char a; // bar[0]
0x0001 char pad0[3];
0x0004 int b;
0x0008 short c;
0x000a char d;
0x000b char _pad1[1];

0x000c char a; // bar[1]


0x000d char _pad0[3];
0x0010 int b;
0x0014 short c;
0x0016 char d;
0x0017 char _pad1[1];

0x0018 char a; // bar[2]


0x0019 char _pad0[3];
0x001c int b;
0x0020 short c;
0x0022 char d;
0x0023 char _pad1[1];

See Also
Reference
__unaligned keyword
Concepts
Working with Packing Structures
Smart Device Development

Avoiding Alignment Errors


Avoiding Alignment Errors
All data types are either primitive types, or complex types that consist of arrays, structures, or unions of simpler types.
Alignment of primitive types
In general, alignment errors can be avoided by following these rules:
Do not enable structure packing.
Do not access a small-aligned address by using a recast pointer of larger alignment.
For example, treating the address of a char data type as a pointer to a long can cause an alignment error because this might
mean executing a four-byte move from an address that is not a multiple of four.
The following example illustrates this style of coding:

char a[10];
char *p = &a[1];
long l = *(long *)p; // ERROR!; Attempt to move a long from
// the address of a char.

Accessing a large-aligned address


Accessing a large-aligned address with a recast pointer of smaller alignment is safe. For example, you could use a char * cast
to access the first byte, or any byte, of a long variable.
If you need to pack structures or move data to unaligned addresses, use the __unaligned keyword.
This keyword cannot resolve alignment problems of pre-existing classes such as in inherited code, or in the Microsoft
Foundation Class Library.
You might need to use structure packing in programs that use large arrays of structures, or to read a pre-existing data format.
In such cases, you can still use packed structures if you also carefully unpack members of a packed structure before using data
in the program. This technique might involve copying the data in a structure member-by-member, or element-by-element, or
field-by-field, into a temporary location that is correctly aligned.
Syntactically, __unaligned is a type qualifier like const and volatile; it controls the meaning of what the pointer points to.
__unaligned has meaning only when used in a pointer declaration.
The following code example shows the use of __unaligned pointer declarations:

int __unaligned *p1; // p1 is a pointer to unaligned int


struct {int i;} __unaligned *p2; // p2 is a pointer to unaligned struct

The following code example illustrates the correct and incorrect use of __unaligned and #pragma pack in conjunction with
integer operations. In the first section, a fault is generated because the __unaligned qualifier is not used, whereas in the
second section, the __unaligned qualifier is used correctly.

#pragma pack (1)


struct s {
char c; // offset 0
int i; // offset 1!
} ss;
#pragma pack ()
void f_improper(int *p)
{
*p = 23; // generates a fault
}
void g_proper(int __unaligned *p) // OK
{
*p = 42;
}
void main ()
{
f_improper(&ss.i);
g_proper(&ss.i);
}

The output from this example appears in the following machine code example. In the output, function f_improper shows the
code generated by the improper handling of unaligned data, and function g_proper shows the extra code generated when
__unaligned is used.
In function g_proper, more than double the number of instructions are generated to handle the unaligned data, but an
alignment fault cannot occur.

f_improper::
mov r3, #0x17
str r0, [r0] // This instruction gets an alignment fault.
mov pc, lr
g_proper::
mov r3, #0x2A
strb r3, [r0] // Four individual bytes are stored,
mov r3, #0 // avoiding an alignment fault.
strb r3, [r0, #1]
strb r3, [r0, #2]
strb r3, [r0, #2]
mov pc, lr

Because there is a performance penalty for accessing data through an __unaligned pointer, use the __unaligned keyword
only when needed.
To guarantee that there are no alignment errors, the compiler must access the de-referenced data as a series of smaller pieces.
If the data is already aligned, this technique for accessing data is not necessary.
Alignment of Complex Types
The following list summarizes the rules for alignment of complex types:
The alignment of an array is the same as the alignment of the base type.
The alignment of a structure or object is the maximum of the alignment factors of all members of the structure. Further,
as long as structure packing is turned off, the compiler pads the structure so each member is placed at the next available
properly aligned address for that member.
The alignment of a union is also the maximum of the alignment factors of all members. Each member's address is that of the
union itself, so there is no padding.
See Also
Reference
__unaligned keyword
Concepts
Working with Packing Structures
Smart Device Development

Working with Packing Structures


Working with Packing Structures
Problems can occur when a structure requires more bytes than the programmer intended, especially when space requirements
are paramount.
Structure Packing and Alignment
Structure packing interacts with compiler alignment behavior as follows.
If the packsize is set equal to or greater than the default alignment, the packsize is ignored.
If the packsize is set smaller than the default alignment, the compiler aligns according to the packsize value.
Thus, if the packsize is set to four, data types having a size of four, eight, or 16 bytes are aligned on addresses that are
multiples of four. However, there is no guarantee that data types eight bytes in size (64 bits) are aligned on addresses that are
a multiple of eight. The packsize has no effect on data types outside of a structure.
In addition, packing affects the alignment of the entire packed structure. For example, in a structure declared under #pragma
pack(1), the alignment of all members are forced to one, regardless of whether they would have been naturally aligned even
without packing.
The following techniques set a packsize, in bytes:
The command-line option /Zp (Struct Member Alignment) sets the packsize to n, in which n can be 1, 2, 4, 8, or 16,
and in which 8 is the default.
The compiler directive #pragma pack([n]) sets the packsize to n, in which n can be 1, 2, 4, 8, or 16. If n is not specified,
#pragma pack resets the packsize to its value at the beginning of compilation: either the value specified by /Zp (Struct
Member Alignment), or the default, which is 8 on most platforms.
The pragma applies only from the point at which it occurs in the source. For example, the /Zp1 option sets the packsize
to 1, which causes the compiler to use no padding within structures. To avoid this problem, turn off structure packing or
use the __unaligned keyword when accessing unaligned members of such structures through pointers.
Guidelines for packing structures
The following list shows possible solutions to the structure issue.
Reordering structure members
If space requirements are critical, reorder the members of the structure so the same-sized elements are next to each
other and pack tightly. Usually, you start with the largest members and work your way down to the smallest ones.
Note that reordering a structure assumes that the user has full control of the data structure, but the user might not have
the freedom to rearrange the members. For example, the data structure might represent the layout of fields in a file on
disk.
Consider the following code example:
struct x_
{
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
} MyStruct;

If you reorganize the members of this structure, as shown in the following code example, the reorganized structure aligns
all members on natural boundaries, and the size of the structure is eight bytes instead of 12.
struct x_
{
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
char a; // 1 byte
} MyStruct;

Padding the structure


A different kind of problem can arise when the structure size requires padding to make sure array elements have the
same alignment, but the user needs to ensure that there is no padding between the array elements. For example, the user
might need to restrict memory usage or read data from a fixed-format source.
If the structure requires padding, you can use the compiler directive #pragma pack. However, #pragma pack causes
elements of the structures to be unaligned, and it requires the use of the __unaligned keyword qualifier to generate the
code needed to access this data without causing alignment faults.
The following example code uses #pragma pack to tell the compiler that the pointer px points to data that is not
naturally aligned, and tells the compiler to generate the appropriate sequence of load, merge, and store operations to do
the assignment efficiently.
# pragma pack (1)
struct x_
{
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
} MyStruct;
# pragma pack ()

void bar()
{
struct x_ __unaligned *px = &MyStruct;
. . . .
px->b = 5;
}

The __unaligned keyword should only be used as a last resort, because the generated code is less efficient than accessing
naturally aligned data. However, the __unaligned keyword is clearly preferable to alignment faults.
If at all possible, arrange the members of a data structure to preserve alignment and minimize space at the same time.
See Also
Reference
__unaligned keyword
Smart Device Development

__unaligned keyword
__unaligned keyword
The __unaligned keyword is a type modifier in pointer definitions. It indicates to the compiler that the data pointed to might
not be properly aligned on a correct address.
To be properly aligned, the address of an object must be a multiple of the size of the type. For example, two-byte objects must
be aligned on even addresses.
When data is accessed through a pointer declared __unaligned, the compiler generates the additional code necessary to load
or store, or read or write the data without causing alignment errors.
It is best to avoid using unaligned data, but in some cases the usage can be justified by the need to access packed structures
such as shared disk structures or I/O hardware.
Note: UNALIGNED is a Win32 macro that expands to __unaligned on hardware platforms that require it. UNALIGNED
expands to nothing on platforms that do not require __unaligned.
For portability, use UNALIGNED instead of the __unaligned keyword. When you use the UNALIGNED macro, include the
windef.h header, as in the following example:

#include <windef.h>
int UNALIGNED *p1; // p1 is a pointer to unaligned int
struct {int i;} UNALIGNED *p2; // p2 is a pointer to unaligned struct

See Also
Concepts
Working with Packing Structures
Smart Device Development

Exception Handling for Device Compilers


Exception Handling for Device Compilers
Exception handling works differently on RISC-based microprocessors (such ARM, SH-4, and MIPS) than on x86
microprocessors. Under many circumstances, the compiler hides the differences; however, the differences become critical
when your code contains assembly language segments.
In simplified terms, in an x86 environment, the data structures associated with exception handling are written onto the stack at
runtime. The OS looks at these structures to locate appropriate exception-handling routines.
In a RISC environment, many data structures associated with exception handling are calculated at compile time and are written
to the data sections of the module being built. RISC-based microprocessors support a table-based mechanism using PDATA
Structures to handle exception processing that depends on the context, the frame and stack pointers, and the program counter.
Because the compiler generates the code segments that set up the stack frame whose address limits are associated with the
function table entry, only code that the compiler handles can access the table entry automatically.
Therefore, in a RISC environment, you must write code that manages exception-related processing for any assembly code
functions you include.
In This Section
SEH in x86 Environments
Provides a brief description of how exception handling works in an x86 processor environment.
SEH in RISC Environments
Provides a brief description of how exception handling works in a RISC processor environment.
PDATA Structures
Provides reference information about data structures used in RISC exception handling.
Related Sections
ARM Prolog and Epilog
Provides guidelines and examples for creating prolog and epilog code sequences for ARM microprocessor compilers.
Renesas SH-4 Prolog and Epilog

Provides guidelines and examples for creating prolog and epilog code sequences for Renesas microprocessor compilers.
MIPS Prolog and Epilog
Provides guidelines and examples for creating prolog and epilog code sequences for MIPS microprocessor compilers.
Smart Device Development

SEH in x86 Environments


SEH in x86 Environments
In simplified terms, data structures associated with exception handling in an x86 environment are written onto the stack at
runtime. The OS looks at these structures to locate approriate exception-handling routines.
Exception-handling structures
In an x86 environment, the FS register points to the current value of the Thread Information Block (TIB) structure. One element
in the TIB structure is a pointer to an EXCEPTION_RECORD structure, which in turn contains a pointer to an exception
handling callback function. Thus, each thread has its own exception callback function.
The x86 compiler builds exception-handling structures on the stack as it processes functions. The FS register always points to
the TIB, which in turn contains a pointer to an EXCEPTION_RECORD structure. The EXCEPTION_RECORD structure points to
the exception handler function.
EXCEPTION_RECORD structures form a linked list: the new EXCEPTION_RECORD structure contains a pointer to the previous
EXCEPTION_RECORD structure, and so on. On Intel-based machines, the head of the list is always pointed to by the first
DWORD in the thread information block, FS:[0] .
Unwinding
When an exception occurs, the system walks the list of EXCEPTION_RECORD structures until it finds a handler for the
exception. When a handler is found, the system walks the list again, up to the node that handles the exception. During this
second traversal, the system calls each handler function a second time with the exception flag set to EH_UNWINDING.
The API builds a dummy exception record structure containing the context and the exception callback function. After each
callback, the corresponding exception frame is removed and the API moves on to the next frame. The API stops unwinding
when it gets to the frame whose address was passed in as the first parameter.
After an exception is handled and all previous exception frames have been called to unwind, execution continues where the
handling callback function indicates.
The code where execution resumes expects that the stack and frame pointers, the ESP and EBP registers on Intel CPUs, are set
to their values within the stack frame that handled the exception.
Therefore, the handler that accepts an exception is responsible for setting the stack and frame pointers to values they had in
the stack frame that contains the SEH code that handled the exception.
See Also
Concepts
SEH in RISC Environments
Smart Device Development

SEH in RISC Environments


SEH in RISC Environments
In a RISC environment, data structures associated with exception processing are calculated at compile time, and written to the
data sections of the module being built.
To locate appropriate handlers when an exception occurs in Win32 environments other than x86, the system first determines
the frames that reside on the callstack, along with their associated functions in code. Any function can have a handler
associated with it. If so, the system gives the handler associated with the function an opportunity to handle the exception.
As with x86, a RISC system invokes handlers in reverse order; that is, it first invokes the handler whose corresponding frames
were most recently pushed onto the stack.
To determine the frames on the stack, the system simulates the execution of a portion of each function's code in reverse. This
simulation creates a CPU context similar to the state the real CPU context held at the point of entry to that function.
This process of reverse execution is known as Virtual Unwinding, because the stack unwind is only being simulated, not
actually performed.
Code elements for unwinding
The portion of the code that is reversed is known as the Prolog of the function. It consists of instructions that modify the stack
pointer and set up the stack frame immediately upon entry to the function.
When a frame has been virtually unwound, the virtual context contains the stack pointer for the previous frame and the return
address for the current function. The return address is very near the place where control left the previous function, so it
corresponds to the program counter of the previous frame.
With each successive program counter and stack pointer, the unwind process can iterate until there are no frames left on the
stack.
To virtually unwind, the system needs a small amount of information about each function. This information is contained in data
structures called PDATA Structures.
A PDATA structure marks where a function begins and ends in the code stream, as well as the location of the function prolog.
Given a program counter associated with a specific stack frame, the Unwinder searches the table of PDATA for the entry
corresponding to the containing function. When found, the Unwinder can unwind the function frame.
The PDATA structure also locates an exception handling routine associated with the function, if one exists.
The compiler generates correct Prolog and Epilog sequences, and PDATA for functions that it compiles, but you must create
appropriate code and PDATA for functions you write in assembly language.
The prolog and epilog sequence must adhere to strict guidelines for Virtual Unwinding to work.
For details on acceptable prologs and epilogs, see the documentation for your target platform.
See Also
Reference
Prolog-Epilog Example
Concepts
Prolog
Virtual Unwinding
Other Resources
Prolog and Epilog
Smart Device Development

Prolog
Prolog
A prolog has several immediately contiguous parts, with no intervening instructions.
Typically, a prolog segment contains separate sequences of instructions that perform the following tasks:
Allocate a stack frame.
Save incoming argument registers.
Set up the frame pointer, if one is to be established. The prolog copies the stack pointer to a designated register before
the initial register saves; then it uses this value to compute the value of the frame pointer.
Save the link register with return address.
Allocate space for compiler-generated temporaries, local variables, and an argument build area.
Indicate the end of the prolog code.
Be sure your prolog code is succinct and only performs the necessary operations.
See Also
Reference
Prolog-Epilog Example
Concepts
SEH in RISC Environments
Smart Device Development

Epilog
Epilog
Although each procedure has only one prolog, a procedure can contain many epilogs if the procedure uses multiple exit points.
Each epilog is required to have certain specific parts. All parts are contiguous, with no intervening instructions.
Typically, an epilog segment contains separate sequences of instructions that perform the following tasks:
Restore the frame pointer register, if it was saved in the prolog
Restore nonvolatile registers, including the Program Counter and the stack
Restore the return address
Deallocate the local frame
Return to the calling function

See Also
Reference
Prolog-Epilog Example
Concepts
SEH in RISC Environments
Smart Device Development

Prolog-Epilog Example
Prolog-Epilog Example
The following code example allocates a stack frame that requires 64 KB of memory for an SH-4 microprocessor. The code
segment for an ARM or MIPS microprocessor is similar, except for the names of registers used.
The prolog segment in this example saves the argument register to the incoming argument save areas. No separate frame
pointer is required. The segment then saves the return address, saves the permanent register, and allocates the stack frame. It
declares an exception handler.
The epilog segment removes the stack frame and recovers the return address.

EXCEPTION_HANDLER RoutineHandler
NESTED_ENTRY Function
// Step 1.
//
mov.l R4, @R15 // Save argument to incoming argument save area.
mov.l R8, @-R15
sts.l PR, @-R15
mov.l @(0x0000001C,pc),r1 // Load constant -65528.
add r1,r15 // Allocate stack frame.
mov.l R5, R8 // Save argument to register.

PROLOG_END

// Routine body

mov.l @(0x0000000C,pc),r1 // Load constant 65528.


add r1,r15 // Remove stack frame.
lds.l @R15+, PR // Recover return address.
rts
mov.l @R15+, R8 // Restore R8.

ENTRY_END Function
Smart Device Development

Virtual Unwinding
Virtual Unwinding
To reconstruct the context that existed on entry to a routine, SEH for RISC processors uses a process called Virtual Unwinding
to emulate a small subset of instructions in prolog and epilog code.
Virtual unwinding provides a syntactically efficient way of transferring control from the kernel exception handler to user-mode
code.
In virtual unwinding, the kernel traverses the call stack to find an appropriate exception handler.
Starting with a CPU context record and an instruction address, the unwinding process interprets instructions in the prolog or
epilog to reconstruct the context, as it existed before the function call.
Code elements for unwinding
The Virtual Unwinder uses a PDATA Structures to determine the procedure start, the procedure end, and the prolog end. The
PDATA structure can also contain a pointer to an exception handler.
The subset of prolog and epilog code that the Virtual Unwinder emulates includes the following:
Adding or subtracting a value from a register
Loading or storing a register on the stack frame
Loading integer constants into registers
Moving between registers
The Virtual Unwinder ignores other instructions found in the prolog or epilog sequences.
Virtual Unwinder process
The following list shows the steps the Virtual Unwinder performs:
1. Search the prolog for an instruction that saves the frame pointer, the stack pointer, or the link register.
If the instruction is present, the instruction saves all permanent registers the Virtual Unwinder must restore.
If the instruction is not present, the link register contains the return address, and the Virtual Unwinder updates only the
program counter.
2. Search for an instruction in the prolog that writes the frame pointer. The unwinding process restores all registers from
this address down, starting from the lowest numbered register to the highest numbered register.
3. Search for an instruction that writes the stack. If such an instruction exists, the unwinding process must reverse-execute
the stack link. The right operand to this subtract is the stack size, which is a constant immediate value.
4. If execution stops inside a prolog, the Virtual Unwinder determines if an instruction that saves the permanent registers
executed, and if a stack link executed.
If the function has not saved the permanent registers, the Virtual Unwinder copies the value in the link register to
the program counter register.
If the function saved the register values, and if no stack link executed, the Virtual Unwinder updates the
permanent registers from the stack pointer.
If execution stopped in a prolog with a linked stack, the Virtual Unwinder reverse-executes the prolog.
Note:
All functions that move the stack pointer must have an associated PDATA structure for SEH to work. These include any functi
on that allocates stack space, calls other functions, saves permanent registers, or has an exception handler. A leaf function (th
at is, a function that calls no other functions) that does not modify a permanent register does not need PDATA. In this case, th
e Virtual Unwinder updates the program counter from the link register and continues to the next frame.

See Also
Reference
Prolog-Epilog Example
PDATA Structures
Concepts
SEH in RISC Environments
Smart Device Development

PDATA Structures
PDATA Structures
ARM, MIPS, and SHx device compilers use PDATA structures to aid in stack walking at run-time. This structure aids in
debugging and exception processing.
The compilers associate one PDATA structure with each procedure.
The data structure is a table stored in a COFF .pdata section. The .pdata section contains an array of function table entries for
exception handling, and is pointed to by the exception table entry in the image data directory.
The MIPS calling standard supports an uncompressed PDATA format, _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY. In most
cases, MIPSII currently uses an uncompressed 20 bytes for each function for the _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
entry.
Leaf functions that do not have associated exception-handling routines do not have an associated pdata entry.
The following table shows the function table entry format for MIPSII images.
Offset Size Field Description
0 4 Begin Address Virtual address of the corresponding function.

4 4 End Address Virtual address of the end of the function.

8 4 Exception Handler Pointer to the exception handler to be executed.

12 4 Handler Data Pointer to additional information to be passed to the handler.

16 4 Prolog End Address Virtual address of the end of the function prolog.

ARM and SH-4 Device compilers support a compressed PDATA structure, _IMAGE_CE_RUNTIME_FUNCTION_ENTRY.
The following table shows the COFF-specified function-table entry format used for the ARM and SH-4 hardware platforms.
Offset Size Field Description
0 4 Begin Address Virtual address of the corresponding function.

4 8 bits Prolog Length Number of instructions in the function's prolog.

4 22 bits Function Length Number of instructions in the function.

4 1 bit 32-bit Flag Set if the function is comprised of 32-bit instructions, cleared for a 16-bit function.

4 1 bit Exception Flag Set if an exception handler exists for the function.

If an exception handler exists or the function length is zero, an additional PDATA_EH structure precedes the function in the .text
section. The function uses PDATA_EH when the function has an associated exception handler or handler data.
In most cases, PDATA structure occupies only eight bytes per function. For functions that have an exception handler, the
PDATA_EHstructure requires an additional eight bytes.
The exception-handling data record and the prolog and function length record are guaranteed to be 4-byte aligned. This
implies that any function associated with one or more of these records is 4-byte aligned.
See Also
Concepts
Virtual Unwinding
Smart Device Development

_IMAGE_CE_RUNTIME_FUNCTION_ENTRY
_IMAGE_CE_RUNTIME_FUNCTION_ENTRY
This structure contains detailed information about runtime exception processing.
_IMAGE_CE_RUNTIME_FUNCTION_ENTRY is used only by ARM and Renesas microprocessor families. It does not apply to
MIPS microprocessors.

typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {


unsigned int FuncStart : 32;
unsigned int PrologLen : 8;
unsigned int FuncLen : 22;
unsigned int ThirtyTwoBit : 1;
unsigned int ExceptionFlag : 1;
} IMAGE_CE_RUNTIME_FUNCTION_ENTRY,
*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;

Parameters
FuncStart
Address of the first instruction in the function. It is the function's entry address.
PrologLen
Length of the prolog in instructions, based on the instruction size indicated in the ThirtyTwoBit flag. PrologLen is set to 1 for
ARM functions, and to 0 for THUMB and SH-4 functions.
FuncLen
Total function length in instructions; see PrologLen, above. A function with 200 ARM instructions would have a FuncLen of
200, or 800 bytes.
ThirtyTwoBit

Size of instructions in a function. ThirtyTwoBit can hold one of the following values: 1Represents ARM functions, each of
which consists of 32-bit instructions, or 4 bytes. 0Represents THUMB functions, each of which consists of 16-bit instructions,
or 2 bytes.
ExceptionFlag

Associated exception handler or handler data. When its value is 1, the PDATA_EH is present in the .text section. When the
ExceptionFlag is 0, no PDATA_EH is present.
Remarks
The IMAGE_CE_RUNTIME_FUNCTION_ENTRY data structure is also called as PDATA. A table containing these records is
stored in a section called .pdata. The .pdata section aids in debugging and exception processing.
If the ExceptionFlag is set, or if the FuncLen is set to 0, an additional PDATA_EH structure exists that precedes the function in the
.text section.
The data record containing this information appears in the .text section, immediately preceding the function, if and only if the
ExceptionFlag bit is set.
This record is used when the function has an associated exception handler or handler data.
See Also
Reference
PDATA Structures
PDATA_EH
Smart Device Development

_IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
_IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
This structure contains detailed information about runtime exception processing.
This structure has an uncompressed 20-byte format.

typedef struct_IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY { ULONG BeginAddress; ULONG EndAddress;


PVOID ExceptionHandler; PVOID HandlerData; ULONG PrologEndAddress;} IMAGE_ALPHA_RUNTIME_F
UNCTION_ENTRY,*PIMAGE_ALPHA_RUNTIME_FUNCTIONG_ENTRY;

Parameters
BeginAddress
Address of the first instruction in the function. It is the function's entry address.
EndAddress
Address of the last instruction in the function. It is the function's end address.
ExceptionHandler
Address of the exception handler for the function.
HandlerData
Address of the exception handler data record for the function.
PrologEndAddress
Address of the last instruction in the prolog.
See Also
Reference
PDATA Structures
Smart Device Development

PDATA_EH
PDATA_EH
This structure holds detailed information about an associated exception handler function. This is an internal data structure used
in OS exception processing.

struct PDATA_EH { unsigned int* pHandler; unsigned int* pHandlerData;};

Parameters
pHandler
Address of the exception handler for the function.
pHandlerData
Address of the exception handler data record for the function.
See Also
Reference
PDATA Structures
_IMAGE_CE_RUNTIME_FUNCTION_ENTRY
Smart Device Development

Device Compiler Error Messagesr


Device Compiler Error Messagesr
The following table describes unique error messages for device compilers.
Error Description
Compiler Error C2729 Indicates an intrinsic function not supported in Thumb mode.

Compiler Error C2759 Indicates an error in inline assembly.

Compiler Error C2822 Indicates premature exit from guarded section.

Compiler Error C2880 Indicates an attempt to create a namespace alias failed because the namespace already exists.

Compiler Error C2887 Indicates too many arguments for a __swi intrinsic.

Compiler Warning (level 2) C47 Indicates one of a variety of SH-specific issues.


20

Compiler Warning (level 1) C47 Indicates an unknown intrinsic function.


21

Compiler Warning (level 1) C47 Indicates an intrinsic function not supported in the target architecture.
32

Compiler Warning (Level 1) C4 Indicates that the linker encountered incompatible object files from different versions of the c
567 ompiler.
See Also
Other Resources
Compilers for Smart Devices
Smart Device Development

Compiler Error C2729


intrinsic not allowed in Thumb mode

This error indicates that the compiler attempted to compile an intrinsic function not supported in Thumb mode, such as
_prefetch.
Note that if source is compiled with the /GL (Whole Program Optimization) switch, this error will not be output until the
referenced object is linked.
Smart Device Development

Compiler Error C2759


in-line assembler reports: "various"

An error occurred in inline assembly code that prevented compilation.


Smart Device Development

Compiler Error C2822


local unwind is not supported on this platform

The implementation of Structured Exception Handling on this platform does not support a local unwind operation, which is
required when prematurely leaving either the guarded section or the termination handler of a try-finally statement. If you
need to leave the guarded section, use the __leave keyword. Leaving the termination handler prematurely can have undefined
behavior and should be avoided.
The following code demonstrates two ways this error message can be generated.

int g;

int main(void)
{
__try {
if (g) return g; // requires local unwind
g = 1;
} __finally {
if (g) return g; // undefined; requires local unwind
g = 2;
}

return 0;
}
Smart Device Development

Compiler Error C2880


__swi requires a valid constant as first argument (SWI number)

The _swi intrinsic function did not receive an integer constant as expected for the first argument. The integer constant must be
in the range [0 - 16777215] for ARM, or [0 - 255] for Thumb microprocessors.
Example

int test_intrinsic(int x)
{

return __swi(x, 12, 14, 13, 12); // error C2880


}
Smart Device Development

Compiler Error C2887


__swi cannot have more than five arguments (SWI number r0 - r3)

__swi intrinsic must have five or fewer arguments.


Example
#pragma intrinsic(__swi)
int test_intrinsic()
{
return __swi(10, 12, 14, 13, 15, 12);
// error cannot have more than 5 args
}
Smart Device Development

Compiler Warning (Level 2) C4720


in-line assembler reports: 'message'

This SH-specific warning applies to multiple situations that might occur for SH inline assembly.
This warning is not visible when compiling with the -GL Whole Program Optimization option.
In the following example code, the compiler issues this warning to indicate a branch in a delay slot.
Example
/* C4720.c */
#ifdef __cplusplus
extern "C" void __asm(const char *, ...);
#else
extern void __asm(const char *,...);
#endif

int main()
{
int ValA = 10;
int ValB = 0;
__asm(
"mov.l @r4, r2\n"
"mov #0, r6\n"
"add r2, r6\n"
"bf/s lala\n"
"bf la\n"
"lala: add r2, r6\n"
"la: mov.l r6, @r5\n",
&ValA,&ValB); /* delay slot branch */
return 0;
}
Smart Device Development

Compiler Warning (Level 1) C4721


'function' : not available as an intrinsic

The compiler encountered an unknown intrinsic function. The use of #pragma intrinsic('function') will be ignored.
Smart Device Development

Compiler Warning (Level 1) C4732


instrinsic ' %s' is not supported in this architecture

The compiler encountered an intrinsic function that is not supported in the target architecture.
The __trap intrinsic is not supported under the MIPS 16 ISA. As a result, the following code example causes the compiler to
generate compiler warning C4732.
Example
#include <cmnintrin.h>

int main()
{
int returnCode = 1;
#if (_INTRINSIC_IS_SUPPORTED(__trap))
__trap(1);
#else
return 1;
#endif
return 0;
}
Smart Device Development

Compiler Warning (Level 1) C4567


Compiler Warning (Level 1) C4567

'function' : behavior change due to parameter 'parameter': calling convention incompatible


with previous compiler versions

This warning indicates that the compiler encountered code that may not execute correctly if it is linked with code compiled by
an earlier compiler version.
This warning is specific to the C++ compiler for the ARM(R) Architecture. Versions of the compiler older than 14.00 use a
different calling convention than newer compilers when passing certain function parameters by value. The two calling
conventions are not compatible, and linking object files from an older compiler with newer object files can result in
unpredictable behavior and crashes if such a parameter is passed by value between the old and new object files.
An object of class, struct, or union type with a user-defined copy constructor is subject to this calling convention change if it is
passed by value. Objects passed by reference are not affected.
If you are linking to object files from older compilers, use this warning to find places in your code where the calling convention
has changed. If objects with user-defined copy constructors are passed by value between old and new object files, the old
object files must be recompiled with a compiler version 14.00 or later.
This warning is off by default.
Example
// The following sample generates C4567:

// C4567.cpp
// (optional) compile with: -w14567
#pragma warning(default : 4567)
#pragma inline_depth(0) // disable function inlining

#include <cstdio>

struct S {
S () { self = this; }
S (S& that) { self = this; }
~S() { // older compilers will fail this test
if ( self != this ) {
printf ("s passed incorrectly\n");
}
}
S* self;
};
void func ( S s ) // C4567 at definition
{
// s destructor is called here
}
int main()
{
S s;
func (s); // C4567 at call site
return 0;
}

See Also
Other Resources
Differences Between Desktop and Device Compilers
Smart Device Development

ARM Family Processors


ARM Family Processors
The ARM microprocessor range provides solutions for the following applications:
Open hardware platforms running complex operating systems with wireless, consumer, and imaging applications.
Embedded, real-time systems for mass storage, automotive, industrial, and networking applications.
Secure applications, including smart cards and Single Inline Memory (SIM) modules.
The ARM Instruction Set Architecture (ISA) includes several technology extensions, such as THUMB technology, that enable
optimum functionality and performance.
In This Section
Intrinsic Functions for ARM Microprocessors
Provides tables and detailed reference information about intrinsic functions supported by key ARM microprocessor families.
ARM Compiler Options
Provides reference information about compiler options specific to ARM microprocessors and compilers.
ARM Calling Sequence Specification
Provides information about ARM register and stack frame layout, ARM prologs and epilogs for SEH, and reference information
about the ARM assembler.
Related Sections
Intrinsic Functions for Device Compilers
Provides reference information about intrinsic functions supported by all device compilers.
RISC Processor Data Alignment
Provides guidelines for data alignment for RISC microprocessors.
SEH in RISC Environments
Describes the key differences between Structured Exception Handling in RISC environments.
Smart Device Development

Intrinsic Functions for ARM Microprocessors


Intrinsic Functions for ARM Microprocessors
The ARM device compiler supports a set of intrinsic functions that are defined for specific ARM microprocessors.
Different sets of intrinsic functions are available for the ARM10, the ARM DSP, the ARM XSCALE, and the Intel PXA270
architectures.
The ARM compiler uses the /QR compiler option to determine which set of intrinsic functions to chose for a particular
compilation. For example, the /QRxscale enables the XScale MAC intrinsic functions. For more information about the /QR flag,
see ARM Compiler Options.
If appropriate target architecture is not defined, some intrinsic functions, such as XScale MAC functions, will fail.
To guard an intrinsic function, or to ensure that an intrinsic function is called only if a specific target architecture is defined, use
the system management function IsProcessorFeaturePresent.
In This Section
ARM10 Intrinsic Functions
ARM DSP-enhanced Intrinsic Functions
ARM XSCALE Intrinsic Functions
WMMX Intrinsic Functions
Smart Device Development

ARM10 Intrinsic Functions


ARM10 Intrinsic Functions
The following ARM10 instructions are supported through intrinsic functions.
Instruction Description
CLZ Counts leading zeroes before first 1-bit.
The common intrinsic _CountLeadingZeros, _CountLeadingZeros64accesses the C
LZ instruction.

BKPT Creates soft breakpoint.


The common intrinsic __trap accesses the BKPT instruction.

_swi Generates a call to the OS using the SWI software interrupt instruction.

__emit Inserts a specified instruction into the instruction stream.

_MoveFromCoProcessor, _MoveFromCoPro Reads data from the ARM coprocessor.


cessor2

_MoveToCoProcessor, MoveToCoprocessor Writes data to the ARM coprocessor.


2
See Also
Reference
ARM Compiler Options
Smart Device Development

CLZ
CLZ
This ARM10 instruction counts the number of binary zero bits before the first binary one bit in a register value. The common
_CountLeadingZeros, _CountLeadingZeros64intrinsic supports CLZ.

unsigned cdecl _CountLeadingZeros(


long Arg1
);

Parameters
Arg1
[in] The value for which the leading zero bits should be determined.
Return Values
Number of binary zero bits.
Remarks
To generate the CLZ instruction for the _CountLeadingZeros intrinsic, use the -QRarch5 or -QRarch5T flag.
If you are compiling on an ARM4 microprocessor, the compiler generates a call to a library name, or to some other sequence
of ARM 4 code.
Requirements
Routine Required header Architecture
CLZ <armintr.h> ARM
See Also
Reference
ARM10 Intrinsic Functions
/QRArch - Specify Target Architecture
Other Resources
Common Intrinsic Function Reference
Smart Device Development

BKPT
BKPT
This ARM10 instruction causes a software breakpoint to occur. The common __trap intrinsic supports BKPT.

int __trap(
int Arg1
);

Parameters
Arg1
[in] Address of breakpointed instruction.
Return Values
None.
Requirements
Routine Required header Architecture
BKPT <armintr.h> ARM
See Also
Reference
ARM10 Intrinsic Functions
Other Resources
Common Intrinsic Function Reference
Smart Device Development

__emit
__emit
This intrinsic function inserts a specified instruction into the stream of instructions output by the compiler.

void __emit(
const unsigned __int32 opcode
);

Parameters
opcode
Instruction word to be inserted.
Return Values
None
Remarks
The value of opcode must be a constant expression known at compile time.
The compiler makes no attempt to interpret the contents of opcode and does not guarantee a CPU or memory state before the
inserted instruction is executed.
The compiler assumes that the CPU and memory states are unchanged after the inserted instruction is executed. Therefore,
instructions that do change state can have a detrimental impact on normal code generated by the compiler.
For this reason, use __emit only to insert instructions that affect a CPU state that the compiler does not normally process, such
as coprocessor state, or to implement functions declared with __declspec(naked).
When generating ARM instructions, the size of an instruction word is 32 bits. When generating Thumb instructions, as when
/QRthumb is specified, the size of an instruction word is 16 bits and the most significant 16 bits of opcode are ignored.
Requirements
Routine Required header Architecture
__emit <armintr.h> ARM
See Also
Reference
ARM10 Intrinsic Functions
/QRthumb
Smart Device Development

_MoveFromCoProcessor, _MoveFromCoProcessor2
_MoveFromCoProcessor, _MoveFromCoProcessor2
These intrinsic functions read data from ARM coprocessors via the coprocessor data transfer instructions.

int _MoveFromCoprocessor(
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);

int _MoveFromCoprocessor2(
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);

Parameters
coproc
Coprocessor number in the range 0 to 15.
opcode1
Coprocessor-specific opcode in the range 0 to 7.
crn

Coprocessor register number in the range 0 to 15, which specifies the first operand to the instruction.
crm
Coprocessor register number in the range 0 to 15, which specifies an additional source or destination operand.
opcode2
Additional coprocessor-specific opcode in the range 0 to 7.
Return Values
The value read from the coprocessor.
Remarks
The values of all five parameters to this intrinsic must be constant expressions known at compile time.
_MoveFromCoprocessor uses the MRC instruction; _MoveFromCoprocessor2 uses MRC2. The parameters correspond to
bitfields encoded directly into the instruction word. The interpretation of the parameters is coprocessor-dependent. For more
information, see the manual for the coprocessor in question.
These intrinsics are not available when generating Thumb instructions, such as when /QRthumb is specified.
Requirements
Routine Required header Architecture
_MoveFromCoprocessor <armintr.h> ARM
Routine Required header Architecture
_MoveFromCoprocessor2 <armintr.h> ARM
See Also
Reference
ARM10 Intrinsic Functions
/QRthumb
Smart Device Development

_MoveToCoProcessor, MoveToCoprocessor2
_MoveToCoProcessor, MoveToCoprocessor2
These intrinsic functions write data to ARM coprocessors via the coprocessor data transfer instructions.

Void _MoveToCoprocessor(
unsigned int value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);

Void _MoveToCoprocessor2(
unsigned int value,
unsigned int coproc,
unsigned int opcode1,
unsigned int crn,
unsigned int crm,
unsigned int opcode2
);

Parameters
value
Value to be written to the coprocessor.
coproc
Coprocessor number in the range 0 to 15.
opcode1

Coprocessor-specific opcode in the range 0 to 7.


crn
Coprocessor register number in the range 0 to 15, which specifies the first operand to the instruction.
crm

Coprocessor register number in the range 0 to 15, which specifies and additional source or destination operand.
opcode2
Additional coprocessor-specific opcode in the range 0 to 7.
Return Values
None
Remarks
The values of coproc, opcode1, crn, crm, and opcode2 must be constant expressions known at compile time.
_MoveToCoprocessor uses the MCR instruction; _MoveToCoprocessor2 uses MCR2.
The parameters correspond to bitfields encoded directly into the instruction word. The interpretation of the parameters is
coprocessor-dependent. For more information, see the manual for the coprocessor in question.
These intrinsics are not available when generating Thumb instructions, such as when /QRthumb is specified.
Requirements
Routine Required header Architecture
_MoveToCoprocessor , <armintr.h> ARM
_MoveToCoprocessor2
See Also
Reference
ARM10 Intrinsic Functions
/QRthumb
Smart Device Development

_swi
_swi
This intrinsic function generates a call to an OS routine using the software interrupt instruction SWI.

unsigned int __swi(


unsigned swi_number,
arg2,
arg3,
arg4
);

Parameters
swi_number
Software Interrupt number
arg2-arg4
Additional arguments for passing
Return Values
The _swi intrinsic function returns the value left in register R0 when control is returned to the instruction following the SWI.
Remarks
The _swi intrinsic applies to the ARM or the Thumb instruction set, depending on whether the compiler is generating 32-bit or
16-bit code.
The first parameter, swi_number, is encoded directly into the immediate field of the instruction. It must be an integer constant
in the range [0 - 16777215] for ARM or [0 - 255] for Thumb.
If additional arguments are included, the function passes the values according to the standard ARM calling convention with
one exception: no arguments or parts of arguments may be passed in memory, that is, on the stack.
Therefore, all arguments must be able to be passed using only registers R0, R1, R2, and R3.
Requirements
Routine Required header Architecture
_swi <armintr.h> ARM
See Also
Reference
/QRArch - Specify Target Architecture
/QRthumb
Smart Device Development

ARM DSP-enhanced Intrinsic Functions


ARM DSP-enhanced Intrinsic Functions
All ARM DSP instructions are supported as intrinsic functions. To use the ARM DSP intrinsics, include the armintr.h header.
The following ARM DSP Instructions have intrinsic functions defined for them.
Function Corresponding ARM DSP in Description
struction
_SmulAddLo_SW SMLAxy A signed-integer multiply and accumulate operation: 16x16-bit multiply follo
_SL wed by a 32-bit add.
_SmulAddHi_SW
_SL
_SmulAddHiLo_S
W_SL
_SmulAddLoHi_S
W_SL

_SmulAddWLo_S SMLAWy A 32x16-bit multiply operation, followed by a 32-bit add of the upper 32 bits
W_SL of the 48 bit product.
_SmulAddWHi_S
W_SL

_SmulAddHi_SW SMLALxy A 16x16-bit multiply operation, followed by a 64-bit add of the product, with
_SQ a 64-bit integer.
_SmulAddLo_SW
_SQ
_SmulAddHiLo_S
W_SQ
_SmulAddLoHi_S
W_SQ

_SmulLo_SW_SL SMULxy A signed-integer 16x16-bit multiply operation.


_SmulHi_SW_SL
_SmulHiLo_SW_S
L
_SmulLoHi_SW_S
L

_SmulWLo_SW_S SMULWy A signed-integer 32x16-bit multiply operation, returning the upper 32-bits.
L
_SmulWHi_SW_S
L

_AddSatInt QADD A saturating add instruction.

_DSubSatInt QSUB A saturating subtract instruction.

_DAddSatInt QDADD An instruction to double an integer and saturate, and then add to a second int
eger and saturate.
_DSubSatInt QDSUB An instruction to double an integer and saturate, and then subtract from a sec
ond integer and saturate.

_ReadCoProcess MRRC, An operation to transfer values from a coprocessor to two ARM registers.
or
MCRR
_WriteCoProcess
or
See Also
Reference
ARM XSCALE Intrinsic Functions
Other Resources
Intrinsic Functions for Device Compilers
Smart Device Development

_SmulAddLo_SW_SL
_SmulAddLo_SW_SL
This ARM DSP-enhanced, signed-integer multiply-accumulate operation multiplies the bottom half of register Rm and the
bottom half of register Rs, producing a 32-bit product. The operation then performs a 32-bit accumulation with Rn.

int _SmulAddLo_SW_SL(
int Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

Contents of Rn, the value added to the product of Arg2 and Arg3.
Arg2
[in] The contents of Rm, the first term multiplied.
Arg3
[in] The contents of Rs, the second term multiplied.
Return Values
The result of multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlabb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLo_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddHi_SW_SL
_SmulAddHiLo_SW_SL
_SmulAddLoHi_SW_SL
Smart Device Development

_SmulAddHi_SW_SL
_SmulAddHi_SW_SL
This ARM DSP-enhanced, signed-integer multiply-accumulate operation multiplies the top half of register Rm and the top half
of register Rs, producing a 32-bit product. The operation then performs a 32-bit accumulation with Rn.

int _SmulAddHi_SW_SL(
int Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

The contents of Rn, the value added to the product of Arg2 and Arg3.
Arg2
[in] The contents of Rm, the first term multiplied.
Arg3
[in] The contents of Rs, the second term multiplied.
Return Values
The result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlatt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddLo_SW_SL
_SmulAddHiLo_SW_SL
_SmulAddLoHi_SW_SL
Smart Device Development

_SmulAddHiLo_SW_SL
_SmulAddHiLo_SW_SL
This ARM DSP-enhanced, signed-integer multiply-accumulate operation multiplies the top half of register Rm and the bottom
half of register Rs to produce a 32-bit product. The operation then performs a 32-bit accumulation with Rn.

int _SmulAddHiLo_SW_SL(
int Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

The contents of Rn, the value added to the product of Arg2 and Arg3.
Arg2
[in] The contents of Rm, the first term multiplied.
Arg3
[in] The contents of Rs, the second term multiplied.
Return Values
The result of multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlatb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHiLo_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddHi_SW_SL
_SmulAddLo_SW_SL
_SmulAddLoHi_SW_SL
Smart Device Development

_SmulAddLoHi_SW_SL
_SmulAddLoHi_SW_SL
This ARM DSP-enhanced, signed-integer multiply-accumulate operation multiplies the bottom half of register Rm and the top
half of register Rs, producing a 32-bit product. The operation then performs a 32-bit accumulation with Rn.

int _SmulAddLoHi_SW_SL(
int Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

The contents of Rn, the value added to the product of Arg2 and Arg3.
Arg2
[in] The contents of Rm, the first term multiplied.
Arg3
[in] The contents of Rs, the second term multiplied.
Return Values
The integer result of multiplication.
Remarks
The compiler translates this instruction into the smlabt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLoHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddLo_SW_SL
_SmulAddHiLo_SW_SL
_SmulAddHi_SW_SL
Smart Device Development

_SmulAddWLo_SW_SL
_SmulAddWLo_SW_SL
This ARM DSP-enhanced, signed integer multiply-accumulate operation multiplies Rm with the bottom 16 bits of Rs; then it
accumulates in Rn. The operation adds the upper 32 bits of the 48-bit product to the 32-bit Rn.

int _SmulAddWLo_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlawb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddW_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddWHi_SW_SL
Smart Device Development

_SmulAddWHi_SW_SL
_SmulAddWHi_SW_SL
This ARM DSP-enhanced, signed integer multiply-accumulate operation multiplies Rm with the top 16 bits of Rs then
accumulates in Rn. The operation adds the upper 32 bits of the 48-bit product to the 32-bit Rn.

int _SmulAddWHi_SW_SL(
int Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

[in] The contents of Rn, the value added to the product of Arg2 and Arg3.
Arg2
[in] The contents of Rm, the first term in the product.
Arg3
[in] The contents of Rs, the second term in the product.
Return Values
The integer result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlawt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddWHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddWLo_SW_SL
Smart Device Development

_SmulAddHi_SW_SQ
_SmulAddHi_SW_SQ
This ARM DSP-enhanced, signed integer multiply-accumulate operation first performs a multiply on two 16-bit source
operands from the top half of register Rm and the top half of Rs. This is followed with a 64 bit accumulate with the 32-bit
registers RdLo and RdHi.

__int64 _SmulAddHi_SW_SQ(
__int64 Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1
Pointers to a 64-bit accumulate that contains RdHi and RdLo.
Arg2
[in] The contents of Rm, the first term in the product.
Arg3
[in] The contents of Rs, the second term in the product.
Return Values
The long integer result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlaltt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHi_SW_SQ <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddLo_SW_SQ
_SmulAddHiLo_SW_SQ
_SmulAddLoHi_SW_SQ
Smart Device Development

_SmulAddLo_SW_SQ
_SmulAddLo_SW_SQ
This ARM DSP-enhanced, signed integer multiply-accumulate operation first performs a multiply on two 16-bit source
operands from the bottom half of register Rm and the bottom half of Rs. This is followed with a 64 bit accumulate with the 32-
bit registers RdLo and RdHi.

__int64 _SmulAddLo_SW_SQ(
__int64 Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1
A pointer to a 64-bit variable used to accumulate the contents of RdHi and RdLo.
Arg2
[in] The contents of Rm, the first term in the product.
Arg3
[in] The contents of Rs, the second term in the product.
Return Values
The result of multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlalbb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLo_SW_SQ <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddHi_SW_SQ
_SmulAddHiLo_SW_SQ
_SmulAddLoHi_SW_SQ
Smart Device Development

_SmulAddHiLo_SW_SQ
_SmulAddHiLo_SW_SQ
This ARM DSP-enhanced, signed integer multiply-accumulate operation multiplies the top half of register Rm and the bottom
half of Rs. This is followed with a 64 bit accumulate with the 32-bit registers RdLo and RdHi.

__int64 _SmulAddHiLo_SW_SQ(
__int64 Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

Pointer to a 64-bit variable used to accumulate the contents of RdHi and RdLo.
Arg2
[in] The contents of Rm, the first term in the product.
Arg3
[in] The contents of Rs, the second term in the product.
Return Values
The long integer result of multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlaltb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHiLo_SW_SQ <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddLo_SW_SQ
_SmulAddLoHi_SW_SQ
_SmulAddHi_SW_SQ
Smart Device Development

_SmulAddLoHi_SW_SQ
_SmulAddLoHi_SW_SQ
This ARM DSP-enhanced, signed integer multiply-accumulate operation multiplies the bottom half of register Rm and the top
half of Rs. This is followed with a 64 bit accumulate with the 32-bit registers RdLo and RdHi.

__int64 _SmulAddLoHi_SW_SQ(
__int64 Arg1,
int Arg2,
int Arg3
);

Parameters
Arg1

A pointer to a 64-bit variable used to accumulate the contents of RdHi and RdLo.
Arg2
[in] The contents of Rm, the first term in the product.
Arg3
[in] The contents of Rs, the second term in the product.
Return Values
The long integer result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlalbt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLoHi_SW_SQ <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddLo_SW_SQ
_SmulAddHiLo_SW_SQ
_SmulAddHi_SW_SQ
Smart Device Development

_SmulHi_SW_SL
_SmulHi_SW_SL
This ARM DSP-enhanced, signed integer multiply operation multiplies the top half of register Rm times the top half of register
Rs, producing a 32-bit result in Rd.

int _SmulHi_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication.
Remarks
The compiler translates this instruction into the smultt assembly instruction.
Requirements
Routine Required header Architecture
_SmulHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulLo_SW_SL
_SmulLoHi_SW_SL
_SmulHiLo_SW_SL
Smart Device Development

_SmulLo_SW_SL
_SmulLo_SW_SL
This ARM DSP-enhanced, signed integer multiply operation multiplies the bottom half of register Rm times the bottom half of
register Rs, producing a 32-bit result in Rd.

int _SmulLo_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication.
Remarks
The compiler translates this instruction into the smulbb assembly instruction.
Requirements
Routine Required header Architecture
_SmulLo_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulLoHi_SW_SL
_SmulHiLo_SW_SL
_SmulHi_SW_SL
Smart Device Development

_SmulHiLo_SW_SL
_SmulHiLo_SW_SL
This ARM DSP-enhanced, signed integer multiply operation multiplies the top half of register Rm times the bottom half of
register Rs, producing a 32-bit result in Rd.

int _SmulHiLo_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication.
Remarks
The compiler translates this instruction into the smultb assembly instruction.
Requirements
Routine Required header Architecture
_SmulHiLo_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulLo_SW_SL
_SmulLoHi_SW_SL
_SmulHi_SW_SL
Smart Device Development

_SmulLoHi_SW_SL
_SmulLoHi_SW_SL
This ARM DSP-enhanced, signed integer multiply operation multiplies the bottom half of register Rm times the top half of
register Rs, producing a 32-bit result in Rd.

int _SmulLoHi_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication.
Remarks
The compiler translates this instruction into the smulbt assembly instruction.
Requirements
Routine Required header Architecture
_SmulLoHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulLo_SW_SL
_SmulHiLo_SW_SL
_SmulHi_SW_SL
Smart Device Development

_SmulWHi_SW_SL
_SmulWHi_SW_SL
This ARM DSP-enhanced, signed-integer multiplication operation performs a 32x16 bit multiply on the 32-bit operand in Rm
and the 16-bit source operand from the top half of register Rs. It then takes the upper 32 bits of the 48-bit product.

int _SmulWHi_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The first term in the product, the contents of Rm.
Arg2

[in] The second term in the product | the contents of Rs.


Return Values
The integer result of the multiplication.
Remarks
The compiler translates this instruction into the smulwt assembly instruction.
Requirements
Routine Required header Architecture
_SmulWHi_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulWLo_SW_SL
Smart Device Development

_SmulWLo_SW_SL
_SmulWLo_SW_SL
This ARM DSP-enhanced, signed-integer multiplication operation performs a 32x16 bit multiply on the 32-bit operand in Rm
and the 16-bit source operand from the bottom half of register Rs. It then takes the upper 32 bits of the 48-bit product.

int _SmulWLo_SW_SL(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the product.
Arg2

[in] The contents of Rs, the second term in the product.


Return Values
The integer result of the multiplication and accumulation.
Remarks
The compiler translates this instruction into the smlawb assembly instruction.
Requirements
Routine Required header Architecture
_SmulWLo_SW_SL <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SmulAddWHi_SW_SL
Smart Device Development

_AddSatInt
_AddSatInt
This ARM DSP-enhanced operation performs a saturating add instruction. It adds registers Rm and Rn, and places the result in
register Rd. It affects the sticky-overflow bit 'Q' if overflow occurs in the addition.

int _AddSatInt(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The contents of Rm, the first term in the sum.
Arg2

[in] The contents of Rn, the second term in the sum.


Return Values
The result of the binary arithmetic.
Remarks
The compiler translates this instruction into the qadd assembly instruction.
Requirements
Routine Required header Architecture
_AddSatInt <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_SubSatInt
Smart Device Development

_DAddSatInt
_DAddSatInt
This operation calculates SAT(Rm + SAT(Rn*2)); that is, the operation first saturates the double of Rn, adds the result to Rm,
then saturates the sum.

int _DAddSatInt(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] This integer is added to the doubled Arg2. It is analogous to the value in Rm.
Arg2

[in] This integer is the term that is doubled. It is analogous to the value in Rn.
Return Values
The result of the binary arithmetic.
Remarks
The compiler translates this instruction into the qdadd assembly instruction.
Saturation can occur on the doubling operation, on the addition, or both. If saturation occurs on the doubling operation, but
not on the addition, the Q flag is set and the the final result is unsaturated.
Requirements
Routine Required header Architecture
_DAddSatInt <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_DSubSatInt
Smart Device Development

_SubSatInt
_SubSatInt
This ARM DSP-enhanced operation performs a saturating subtract instruction. It subtracts the value in Rn from the value in
Rm, and places the result in register Rd. This operation affects the sticky-overflow bit 'Q' if overflow occurs in the subtraction.

int _SubSatInt(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The first term in the difference, the contents of Rm.
Arg2

[in] The second term in the difference, the contents of Rn.


Return Values
The result of the binary arithmetic.
Remarks
The compiler translates this intrinsic into the qsub assembly instruction.
Requirements
Routine Required header Architecture
_SubSatInt <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_AddSatInt
Smart Device Development

_DSubSatInt
_DSubSatInt
This operation doubles Rn and saturates, then subtracts the result from Rm and saturates. This operation affects the sticky-
overflow bit 'Q' if overflow occurs in the subtraction.

int _DSubSatInt(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] The doubled Arg2 is subtracted from this integer. It is the contents of the value in Rm.
Arg2

[in] This integer is doubled. It is the contents of the value in Rn.


Return Values
The value that results from the arithmetic performed.
Remarks
The compiler translates this instruction into the qdsub assembly instruction.
Requirements
Routine Required header Architecture
_DSubSatInt <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
_DAddSatInt
Smart Device Development

_ReadCoProcessor
_ReadCoProcessor
This instruction causes the specified coprocessor registers to transfer values to two ARM registers.

__int64 _ReadCoProcessor(
int Arg1
);

Parameters
Arg1
[in] Coprocessor number, equivalent to cp_num.
Return Values
Value held in coprocessor register.
Remarks
The compiler translates this instruction into the MRRC assembly instruction for ARM DSP-enhanced processors, and into the
MRA assembly instruction for ARM XScale processors. MRA is disassembled as the MRCC instruction.
The XScale and the DSP-enhanced ARM microprocessors each implement this instruction in a different way:
For the ARM XScale implementation, this instruction does the following:
Moves 64 bits of data to ARM registers from Coprocessor registers
Moves the 40-bit accumulator value (acc0) into two registers
Moves bits [31:0] of the value in acc0 into the register RdLo
Sign-extends bits [39:32] of the value in acc0 to 32 bits and moves them into the register RdHi
For the ARM DSP-enhanced implementation, this instruction causes the coprocessor to transfer values to the two
general-purpose registers Rd and Rn.
Requirements
Routine Required header Architecture
_ReadCoProcessor <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
ARM XSCALE Intrinsic Functions
_WriteCoProcessor
Smart Device Development

_WriteCoProcessor
_WriteCoProcessor
This instruction causes the specified ARM registers to transfer values to coprocessor registers.

void _WriteCoProcessor(
__int64 Arg1,
int Arg2
);

Parameters
Arg1
[in] Values to be written to coprocessor.
Arg2
[in] Coprocessor number. This should be zero.
Return Values
None.
Remarks
For the ARM XScale processor, the compiler translates this intrinsic into the MAR assembly instruction. MAR is disassembled
as the MCRR instruction.
For the ARM DSP-enhanced processor, the compiler translates this intrinsic into the MCRR assembly instruction.
The XScale and the DSP-enhanced ARM microprocessors implement this instruction in two slightly different ways.
ARM XScale implementation
This instruction moves the value in register RdLo to bits [31:0] of the 40-bit accumulator (acc0), and moves bits [7:0] of
the value in register RdHi into bits [39:32] of acc0.
ARM DSP-enhanced implementation
This instruction causes the two general-purpose registers Rd and Rn to transfer values to the coprocessor.
Requirements
Routine Required header Architecture
_WriteCoProcessor <armintr.h> ARM10, ARM-DSP
See Also
Reference
ARM XSCALE Intrinsic Functions
ARM DSP-enhanced Intrinsic Functions
_ReadCoProcessor
Smart Device Development

ARM XSCALE Intrinsic Functions


ARM XSCALE Intrinsic Functions
To increase the performance and precision of the audio processing algorithms, the Intel 80200(XScale) microprocessor
implementation of ARM adds a Digital Signal Processing (DSP) coprocessor.
This coprocessor contains a 40-bit accumulator and new instructions.
To implement the intrinsic functions for the ARM XScale instruction set, use the /QRxscale - Specify XSCALE Target compiler
option when compiling your code.
The following XScale instructions are implemented through intrinsic functions.
Function ARM XScale inst Description
ruction
_SmulAdd_SL_AC MIA Multiplies the signed value in register Rs by the signed value in register Rm, and then ad
C ds the result to the 40-bit accumulator.

_SmulAddPack_2 MIAPH Performs two 16x16 signed multiplications on packed half-word data and accumulates th
SW_ACC ese to a single 40-bit accumulator.

_SmulAddLo_SW MIAxy Performs one 16-bit signed multiplication and accumulates the result to a single 40-bit ac
_ACC cumulator.
_SmulAddHi_SW_
ACC
_SmulAddLoHi_S
W_ACC
_SmulAddHiLo_S
W_ACC

_ReadCoProcesso MAR Moves 64 bits of data from ARM registers to coprocessor registers.
r

_WriteCoProcess MRA Moves 64 bits of data to ARM registers from coprocessor registers.
or

_PreLoad PLD This instruction is used as a hint to the memory system that a memory access from the sp
ecified address will occur shortly.
See Also
Reference
ARM10 Intrinsic Functions
ARM XSCALE Intrinsic Functions
Smart Device Development

_PreLoad
_PreLoad
This instruction is a soft preload instruction; that is, this instruction indicates to the memory system that a memory access from
the specified address will occur shortly.

void _PreLoad(
unsigned long* addr
);

Parameters
addr
Location of memory access.
Return Values
None.
Remarks
The compiler translates this instruction into the PLD assembly instruction.
Requirements
Routine Required header Architecture
_PreLoad <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
Smart Device Development

_SmulAdd_SL_ACC
_SmulAdd_SL_ACC
This operation multiplies the signed value in register Rs by the signed value in register Rm and then adds the result to the 40-
bit accumulator, acc0.

void _SmulAdd_SL_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Values in Rs to be written to coprocessor.
Arg2

[in] Values in Rm to be written to coprocessor.


Return Values
None.
Remarks
The compiler translates this instruction into the mia assembly instruction.
Requirements
Routine Required header Architecture
_SmulAdd_SL_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
Smart Device Development

_SmulAddHi_SW_ACC
_SmulAddHi_SW_ACC
This instruction multiplies the top half of Rm and the top half of Rs and accumulates the result to a single 40-bit accumulator.
The instruction does not support unsigned multiplication, but interprets all arguments as signed data values.

void _SmulAddHi_SW_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Value in Rm.
Arg2
[in] Value in Rs.
Return Values
None.
Remarks
The compiler translates this instruction into the miatt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHi_SW_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
_SmulAddLo_SW_ACC
_SmulAddHiLo_SW_ACC
_SmulAddLoHi_SW_ACC
Smart Device Development

_SmulAddHiLo_SW_ACC
_SmulAddHiLo_SW_ACC
This ARM XScale instruction multiplies the top half of Rm and the bottom half of Rs and accumulates the result to a single 40-
bit accumulator.
The instruction does not support unsigned multiplication, but interprets all arguments as signed data values.

void _SmulAddHiLo_SW_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Value in Rm.
Arg2
[in] Value in Rs.
Return Values
None.
Remarks
The compiler translates this instruction into the miatb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddHiLo_SW_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
_SmulAddLo_SW_ACC
_SmulAddHi_SW_ACC
_SmulAddLoHi_SW_ACC
Smart Device Development

_SmulAddLo_SW_ACC
_SmulAddLo_SW_ACC
This ARM XScale instruction multiplies the bottom half of Rm and the bottom half of Rs and accumulates the result to a single
40-bit accumulator.
The instruction does not support unsigned multiplication, but interprets all arguments as signed data values.

void _SmulAddLo_SW_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Value in Rm.
Arg2
[in] Value in Rs.
Return Values
None.
Remarks
The compiler translates this instruction into the miabb assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLo_SW_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
_SmulAddHi_SW_ACC
_SmulAddHiLo_SW_ACC
_SmulAddLoHi_SW_ACC
Smart Device Development

_SmulAddLoHi_SW_ACC
_SmulAddLoHi_SW_ACC
This ARM XScale instruction multiplies the bottom half of Rm and the top half of Rs and accumulates the result to a single 40-
bit accumulator.
The instruction does not support unsigned multiplication, but interprets all arguments as signed data values.

void _SmulAddLoHi_SW_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Value in Rm.
Arg2
[in] Value in Rs.
Return Values
None.
Remarks
The compiler translates this instruction into the miabt assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddLoHi_SW_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM DSP-enhanced Intrinsic Functions
ARM XSCALE Intrinsic Functions
_SmulAddLo_SW_ACC
_SmulAddHi_SW_ACC
_SmulAddHiLo_SW_ACC
Smart Device Development

_SmulAddPack_2SW_ACC
_SmulAddPack_2SW_ACC
This ARM XScale instruction performs two 16x16 signed multiplication on packed half word data and accumulates these to a
single 40-bit accumulator.

void _SmulAddPack_2SW_ACC(
int Arg1,
int Arg2
);

Parameters
Arg1
[in] Value in Rm.
Arg2

[in] Value in Rs.


Return Values
None.
Remarks
First, this instruction multiplies the lower 16 bits of the value in Rm with the lower 16 bits of the value in Rs.
It then performs a multiplication with the upper 16 bits of Rs and Rm.
The instruction sign-extends both signed 32-bit products and then adds them to the value in the 40-bit accumulator (acc0).
The compiler translates this instruction into the miaph assembly instruction.
Requirements
Routine Required header Architecture
_SmulAddPack_2SW_ACC <armintr.h> ARM10, ARM-DSP, ARM XSCALE
See Also
Reference
ARM XSCALE Intrinsic Functions
Smart Device Development

WMMX Intrinsic Functions


WMMX Intrinsic Functions
The ARM-compliant Intel processors such as the PXA270 processor with Wireless MMX (WMMX) technology have instructions
to enable development of optimized multimedia applications. The instructions are implemented as co-processor instructions.
This technology uses the single-instruction, multiple-data (SIMD) technique. By processing data elements in parallel,
applications with media-rich bit streams can significantly improve performance by using SIMD instructions.
For complete details of the hardware instructions and intrinsic functions, data types, and registers can be found in the Intel
Wireless MMX Technology Developer Guide, number 251793-001
http://www.intel.com/design/pca/prodbref/251669_devguide.pdf.
In This Section
WMMX Technology Overview
Provides a brief overview of the WMMX technology
WMMX Arithmetic Intrinsics
Provides a reference table of packed arithmetic intrinsics.
WMMX Shift Intrinsics
Provides a reference table of shift intrinsics.
WMMX Logical Intrinsics
Provides a reference table of logical intrinsics.
WMMX Compare Intrinsics
Provides a reference table of compare intrinsics.
WMMX Pack/Unpack Intrinsics
Provides a reference table of pack/unpack intrinsics.
WMMX Set Intrinsics

Provides a reference table of set intrinsics.


WMMX General Support Intrinsics
Provides a reference table of general support intrinsics.
External Resources
Intel Wireless MMX Technology Developer Guide, number 251793-001
Smart Device Development

WMMX Technology Overview


WMMX Technology Overview
Intel's wireless MMX (WMMX) technology is an extended implementation of the Intel architecture (IA) MMX instruction set. The
technology uses a single-instruction, multiple-data (SIMD) technique to speed up multimedia and communications software by
processing data elements in parallel.
The WMMX instruction set adds 57 opcodes and a 64-bit data type. In addition, there are sixteen 64-bit MMX technology
registers, each of which can be directly addressed using the register names wR0 to wR15.
Additional information and details about the MMX instructions, data types, and registers can be found in the Intel Wireless
MMX Technology Developer Guide, number 251793-001. This guide is available online at Intel hardware design.
New Registers
The WMMX technology intrinsic functions provide sixteen registers (wR0 to wR15) that are 64 bits long (0 to 63).
These new data registers enable the processing of data elements in parallel. Because each register can hold more than one data
element, the processor can process more than one data element simultaneously. This processing capability is also known as
SIMD processing. To enable SIMD processing with the C/C++ compiler, new data types are defined to exploit the expanded
size of the new registers.
Using intrinsic functions allows you to code with the syntax of C function calls and variables instead of with the assembly
language. For each computational and data manipulation instruction in the new extension sets, there is a corresponding C
intrinsic that directly implements that instruction. This frees you from managing registers and assembly programming. Further,
the compiler optimizes the instruction scheduling so that your executable runs faster.
__m64 data type
The __m64 data type is used to represent the contents of a WMMX register, which is the register used by the WMMX
technology intrinsic functions. The __m64 data type can hold eight 8-bit values, four 16-bit values, two 32-bit values, or one
64-bit value.
New Data Types Usage Guidelines
The new __m64 data type is not a basic ANSI C data type, and therefore you must observe the following usage restrictions:
Use __m64 only on the left side of an assignment as a return value or as a parameter. You cannot use it with other
arithmetic expressions (" + ", " ", and so on).
Use __m64 as objects in aggregates, such as unions, to access the byte elements and structures.
Use __m64 only with the WMMX intrinsic functions.
Data Alignment
Many of the WMMX intrinsic functions have data alignment requirements. If these intrinsic functions are used and data is not
appropriately aligned, the program will throw an exception that must be handled by the program; otherwise, the program will
fault. To support the use of WMMX intrinsic functions, the user must take a more active role to guarantee that alignment issues
are appropriately addressed.
For more information, see RISC Processor Data Alignment.
See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Arithmetic Intrinsics


WMMX Arithmetic Intrinsics
The intrinsics listed in the following table perform packed arithmetic operations.
Intrinsic name Operation WMMX Instruction Argument and result values/bits
_mm_add_pi16 Adds WADDH 4/16, 4/16

_mm_add_pi32 Adds WADDW 2/32, 2/32

_mm_add_pi8 Adds WADDB 8/8, 8/8

_mm_adds_pi16 Adds, signed WADDHSS 4/16, 4/16

_mm_adds_pi32 Adds, signed WADDWSS 2/32, 2/32

_mm_adds_pi8 Adds, signed WADDBSS 8/8, 8/8

_mm_adds_pu16 Adds WADDHUS 4/16, 4/16

_mm_adds_pu32 Adds WADDWUS 2/32, 2/32

_mm_adds_pu8 Adds WADDBUS 8/8, 8/8

_mm_sub_pi16 Subtracts WSUBH 4/16, 4/16

_mm_sub_pi32 Subtracts WSUBW 2/32, 2/32

_mm_sub_pi8 Subtracts WSUBB 8/8, 8/8

_mm_subs_pi16 Subtracts, signed WSUBHSS 4/16, 4/16

_mm_subs_pi32 Subtracts, signed WSUBWSS 2/32, 2/32

_mm_subs_pi8 Subtracts, signed WSUBBSS 8/8, 8/8

_mm_subs_pu16 Subtracts WSUBHS 4/16, 4/16

_mm_subs_pu32 Subtracts WSUBWSS 2/32, 2/32

_mm_subs_pu8 Subtracts WSUBBUS 8/8, 8/8

_mm_madd_pi16 Multiplies WMADDS 4/16, 2/32

_mm_madd_pu16 Multiplies WMADDU 4/16, 2/32

_mm_mulhi_pi16 Multiplies, signed WMULSH 4/16, 4/16 (high)

_mm_mulhi_pu16 Multiplies, signed WMULUH 4/16, 4/16 (high)

_mm_mullo_pi16 Multiplies WMULSL/WMULUL 4/16, 4/16 (low)


_mm_mac_pi16 Multiply-accumulate, signed WMACS 4/16, 4/16

_mm_mac_pu16 Multiply-accumulate WMACU 4/16, 4/16

_mm_macz_pi16 Multiply-accumulate, signed WMACSZ 4/16, 4/16

_mm_macz_pu16 Multiply-accumulate WMACUZ 4/16, 4/16

_mm_acc_pu16 Accumulate WACCH 4/16, 1/16

_mm_acc_pu32 Accumulate WACCW 2/32. 2/32

_mm_acc_pu8 Accumulate WACCB 8/8, 1/8

_mm_mia_si64 Multiply-accumulate, signed TMIA 1/64

_mm_miabb_si64 Multiply-accumulate, signed TMIABB 1/64

_mm_miabt_si64 Multiply-accumulate, signed TMIABT 1/64

_mm_miaph_si64 Multiply-accumulate, signed TMIAPH 1/64

_mm_miatb_si64 Multiply-accumulate, signed TMIATB 1/64

_mm_miatt_si64 Multiply-accumulate, signed TMIATT 1/64


See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Shift Intrinsics


WMMX Shift Intrinsics
The intrinsics listed in the following table perform shift operations.
Intrinsic name Shift direction Shift type WMMX instruction
_mm_sll_pi16 Left Logical WSLLH

_mm_slli_pi16 Left Logical Composite

_mm_sll_pi32 Left Logical WSLLW

_mm_slli_pi32 Left Logical Composite

_mm_sll_si64 Left Logical WSLLD

_mm_slli_si64 Left Logical Composite

_mm_sra_pi16 Right Arithmetic WSRAH

_mm_srai_pi16 Right Arithmetic Composite

_mm_sra_pi32 Right Arithmetic WSRAW

_mm_srai_pi32 Right Arithmetic Composite

_mm_sra_pi64 Right Arithmetic WSRAD

_mm_srai_pi64 Right Arithmetic Composite

_mm_srl_pi16 Right Logical WSRLH

_mm_srli_pi16 Right Logical Composite

_mm_srl_pi32 Right Logical WSRLW

_mm_srli_pi32 Right Logical Composite

_mm_srl_si64 Right Logical WSRLD

_mm_srli_si64 Right Logical Composite

_mm_ror_pi16 Rotate right Logical WRORH

_mm_rori_pi16 Rotate right Logical WRORW

_mm_ror_pi32 Rotate right Logical WRORD

_mm_rori_pi32 Rotate right Logical Composite

_mm_ror_si64 Rotate right Logical Composite


_mm_rori_si64 Rotate right Logical Composite
See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Logical Intrinsics


WMMX Logical Intrinsics
The intrinsics listed in the following table perform logical operations.
Intrinsic name Operation WMMX instruction
_mm_and_si64 Bitwise AND WAND

_mm_andnot_si64 Logical NOT WANDN

_mm_or_si64 Bitwise OR WOR

_mm_xor_si64 Bitwise exclusive OR WXOR


See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Compare Intrinsics


WMMX Compare Intrinsics
The intrinsics listed in the following table perform comparisons.
Intrinsic name Comparison Number of elements Element bit size WMMX instruction
_mm_cmpeq_pi8 Equals 8 8 WCMPEQB

_mm_cmpeq_pi16 Equals 4 16 WCMPEQH

_mm_cmpeq_pi32 Equals 2 32 WCMPEQW

_mm_cmpgt_pi8 Greater than, signed 8 8 WCMPGTSB

_mm_cmpgt_pu8 Greater than, unsigned 8 8 WCMPGTUB

_mm_cmpgt_pi16 Greater than, signed 4 16 WCMPGTSH

_mm_cmpgt_pu16 Greater than, unsigned 4 16 WCMPGTUH

_mm_cmpgt_pi32 Greater than, signed 2 32 WCMPGTSW

_mm_cmpgt_pu32 Greater than, unsigned 2 32 WCMPGTUW


See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Pack/Unpack Intrinsics


WMMX Pack/Unpack Intrinsics
The intrinsic functions listed in the following table provide pack and unpack operations.
Intrinsic name Operation WMMX Instruction
_mm_packs_pi16 Packs, signed and saturated WPACKHSS

_mm_packs_pi32 Packs, signed and saturated WPACKWSS

_mm_packs_pu16 Packs, saturated WPACKHUS

_mm_unpackhi_pi8 Interleaves WUNPCKIHB

_mm_unpackhi_pi16 Interleaves WUNPCKIHH

_mm_unpackhi_pi32 Interleaves WUNPCKIHW

_mm_unpacklo_pi8 Interleaves WUNPCKILB

_mm_unpacklo_pi16 Interleaves WUNPCKILH

_mm_unpacklo_pi32 Interleaves WUNPCKILW

_mm_packs_si64 Packs, signed and saturated WPACKDSS

_mm_packs_su64 Packs, saturated WPACKDUS

_mm_packs_pu32 Packs, saturated WPACKWUS

_mm_unpackeh_pi8 Interleaves, signed and extended WUNPCKEHSB

_mm_unpackeh_pi16 Interleaves, signed and extended WUNPCKEHSH

_mm_unpackeh_pi32 Interleaves, signed and extended WUNPCKEHSW

_mm_unpackeh_pu8 Interleaves, unsigned and extended WUNPCKEHUB

_mm_unpackeh_pu16 Interleaves, unsigned and extended WUNPCKEHUH

_mm_unpackeh_pu32 Interleaves, unsigned and extended WUNPCKEHUW

_mm_unpackel_pi8 Interleaves, signed and extended WUNPCKELSB

_mm_unpackel_pi16 Interleaves, signed and extended WUNPCKELSH

_mm_unpackel_pi32 Interleaves, signed and extended WUNPCKELSW

_mm_unpackel_pu8 Interleaves, extended WUNPCKELUB

_mm_unpackel_pu16 Interleaves, extended WUNPCKELUH


_mm_unpackel_pu32 Interleaves, extended WUNPCKELUW
See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX Set Intrinsics


WMMX Set Intrinsics
The intrinsics listed in the following table are made up of composite instructions.
Intrinsic name Operation Number of elements Signed Reverse order WMMX Instruction
_mm_setzero_si64 Sets to zero 1 No No WZERO

_mm_set_pi32 Sets integer values 2 No No Composite

_mm_set_pi16 Sets integer values 4 No No Composite

_mm_set_pi8 Sets integer values 8 No No Composite

_mm_set1_pi32 Sets integer values 2 Yes No TBCSTW

_mm_set1_pi16 Sets integer values 4 Yes No TBCSTH

_mm_set1_pi8 Sets integer values 8 Yes No TBCSTB

_mm_setr_pi32 Sets integer values 2 No Yes Composite

_mm_setr_pi16 Sets integer values 4 No Yes Composite

_mm_setr_pi8 Sets integer values 8 No Yes Composite

_mm_setwcx Set control register -- -- -- TMCR

_mm_getwcx Get control register -- -- -- TMRC


See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

WMMX General Support Intrinsics


WMMX General Support Intrinsics
The intrinsic functions listed in the following table provide general support operations.

Intrinsic name Operation WMMX Instruction

_mm_extract_pi8 Extracts on 8 bytes TEXTRMSB

_mm_extract_pi16 Extracts on 4 half words TEXTRMSH

_mm_extract_pi32 Extracts on two words TEXTRMSW

_mm_extract_pu8 Extracts on 8 bytes TEXTRMUB

_mm_extract_pu16 Extracts on 4 half words TEXTRMUL

_mm_extract_pu32 Extracts on two words TEXTRMUW

_mm_insert_pi8 Inserts a byte. TINSRB

_mm_insert_pi16 Inserts a half word TINSRH

_mm_insert_pi32 Inserts a word TINSRW

_mm_max_pi8 Computes maximum WMAXSB

_mm_max_pi16 Computes maximum WMAXSH

_mm_max_pi32 Computes maximum WMAXUB

_mm_max_pu8 Computes maximum, unsigned WMAXUB

_mm_max_pu16 Computes maximum, unsigned WMAXUH

_mm_max_pu32 Computes maximum, unsigned WMAXUW

_mm_min_pi8 Computes minimum WMINXSB

_mm_min_pi16 Computes minimum WMINSH

_mm_min_pi32 Computes minimum WMINUB

_mm_min_pu8 Computes minimum, unsigned WMINUB

_mm_min_pu16 Computes minimum, unsigned WMINUH

_mm_min_pu32 Computes minimum, unsigned WMINUW

_mm_movemask_pi8 Creates an 8-bit mask TMOVMSKB

_mm_movemask_pi16 Creates a 4 half-word mask TMOVMSKH


_mm_movemask_pi32 Creates a two word mask TMOVMSKW

_mm_shuffle_pi8 Returns a combination of 4 words WSHUFH

_mm_avg_pu8 Computes rounded average WAV2BR

_mmavg_pu16 Computes rounded average WAV2HR

_mmavg2_pu8 Computes average WAVG2B

_mmavg2_pu16 Computes average WAVG2H

_mm_sada_pu8 Computes absolute sum of differences WSADB

_mm_sada_pu16 Computes absolute sum of differences WSADH

_mm_align_si64 Extracts a 64-bit value WALIGN/WALIGNR

_mm_cvtsi32_si64 Converts from int to a 64-bit __m64 object TMCRR

_mm_cvtsi64_si32 Converts from__m64 object to int TMRRC

_mm_empty Empties MM state ---


See Also
Other Resources
WMMX Intrinsic Functions
Smart Device Development

ARM Compiler Options


ARM Compiler Options
The following table shows compiler options for ARM microprocessors.
Option Description
/QRArch - Specify Target Architecture Specifies target ARM microprocessors.

/QRimplicit-import - Disable Importing of Hel Statically links compiler helper functions.


pers

/QRinterwork-return - Enable Interworking Generates code that can interwork between ARM and Thumb mode.

/QRxscale - Specify XSCALE Target Generates code for Intel XScale microprocessors.

/QRxscalesched Generates code that enables internal scheduler optimizations for the XScale pip
eline.

/QRthumb Generates code for Thumb mode.


See Also
Other Resources
ARM Family Processors
Smart Device Development

/QRArch - Specify Target Architecture


/QRArch - Specify Target Architecture
This option specifies which ARM architecture the compiler will target. The following line shows the usage of this option:

/Qrarch{4|5} [T]

The following options are available for this switch.


4

Indicates the ARM4 architecture.


5
Indicates the ARM5 architecture.
T
Indicates that the architecture supports the ARM/Thumb interworking instructions.
See Also
Other Resources
ARM Family Processors
Smart Device Development

/QRimplicit-import - Disable Importing of Helpers


/QRimplicit-import - Disable Importing of Helpers
This option forces the compiler to use statically linked helper functions.
Compiler helper functions are typically located in a DLL. To reduce the thunk overhead when calling these functions, the
compiler uses the dllimport calling mechanism. If OS or driver code is linked statically with the helper functions, the
/QRimplicit-import- flag is used to force the compiler to use typical calling mechanisms.
See Also
Other Resources
ARM Calling Sequence Specification
Smart Device Development

/QRinterwork-return - Enable Interworking


/QRinterwork-return - Enable Interworking
This option instructs the compiler to generate code that enables programs to call functions from ARM or Thumb mode and
return correctly.
See Also
Concepts
THUMB-enabled ARM Implementation
Smart Device Development

/QRxscale - Specify XSCALE Target


/QRxscale - Specify XSCALE Target
This option specifies that the compiler should generate code that runs on an Intel XScale processor. This enables the XScale
MAC intrinsics and causes the scheduler to optimize for the XScale pipeline.
See Also
Reference
ARM XSCALE Intrinsic Functions
Smart Device Development

/QRxscalesched
/QRxscalesched
This option enables a re-ordering of instructions in the generated code to take advantage of XScale-specific optimizations for
internal scheduling of instruction execution.
The functionality offered by this option is a proper subset of the functionality of the /QRxscale - Specify XSCALE Target option.
See Also
Reference
ARM XSCALE Intrinsic Functions
Smart Device Development

/QRthumb
/QRthumb
This option enables the ARM Thumb instruction set.
See Also
Concepts
THUMB-enabled ARM Implementation
Smart Device Development

ARM Calling Sequence Specification


ARM Calling Sequence Specification
The ARM Calling Sequence Specification for the ARM device compiler provides direction for the development of compilers and
assembly language programs for the Arm family of microprocessors.
In This Section
ARM Registers
Shows the assigned register roles.
ARM Stack Frame Layout
Describes how ARM microprocessors specify the stack layout.
ARM Prolog and Epilog
Describes the prolog and epilog code segments required for Structured Exception Handling.
THUMB-enabled ARM Implementation
Describes how to implement ARM-Thumb interworking.
ARM Assembler
Describes ARM Assembler macros for prolog and epilog, directives, and command-line options.
Related Sections
ARM Compiler Options
Provides reference information about compiler options for ARM compilers.
Intrinsic Functions for ARM Microprocessors
Provides reference information about intrinsic functions supported only by ARM compilers
Differences Between Desktop and Device Compilers
Describes critical differences in implementation between desktop and device compilers.
Smart Device Development

ARM Registers
ARM Registers
The ARM microprocessor has 16 general-purpose registers.
THUMB has eight general-purpose registers, R0-R7, and access to the high registers, R8-R15.
The following table shows the assigned register roles.
Register Description
R0 Argument1, Return Value
Temporary register

R1 Argument2, Second 32-bits if double/int Return Value


Temporary register

R2-R3 Arguments
Temporary registers

R4-R10 R7 is THUMB frame pointer


Permanent registers.

R11 ARM frame pointer


Permanent register

R12 Temporary register

R13 Stack pointer


Permanent register

R14 Link register


Permanent register

R15 Program Counter

Note that registers R0 through R3 hold the first four words of incoming arguments. The microprocessor constructs remaining
arguments in the calling function's argument build area, which does not provide space into which R0 through R3 can be
spilled.
The following table shows additional predefined registers for Vector Floating Point and for WMMX.
Register Description
s0-s32 VFP single-precision registers

d0-d16 VFP double-precision registers

fpsid VFP system ID register

fpscr VFP status and control register

fpexc VFP exception register


wr0-wr16 WMMX SIMD data registers

wc0-wc16 WMMX status and control registers

wcid WMMX coprocessor ID register, synonymous with wc0

wcon WMMX control register, synonymous with wc1

wcssf WMMX saturation SIMD flags, synonymous with wc2

wcasf WMMX arithmetic SIMD flags, synonymous with wc3

wcgr0-wcgr3 WMMX control general-purpose registers, synonymous with wc8-wc11

See Also
Reference
ARM Assembler Macros
Concepts
ARM Stack Frame Layout
Smart Device Development

ARM Stack Frame Layout


ARM Stack Frame Layout
The following list gives more information about ARM microprocessor stack frame layout.
The Register Save Area (RSA) holds the preserved values of permanent registers used by the function. It also contains
the function return address.
The Locals and Temporaries area represents the stack space allocated for local variables and compiler-generated
temporaries.
The first four words at the top of the stack can contain the values passed in R0-R3. Any of these values could be missing.
The values should be stored in the R0-R3 if registers cannot hold the arguments for the entire function, or if the
addresses for the arguments are in use.
If a routine needs storage space for the first four words of arguments, it creates and initializes the storage at the top of
the called function stack.
If a register keeps an argument for the argument live range, the argument has no associated storage in the stack frame.

ARM Frame and Stack Pointers


A frame pointer helps mitigate problems with the limited size of the bit field that specifies register-displacement-addressing
offset. The frame pointer typically points to a fixed frame offset in the RSA or Local and Temporaries areas of the stack frame,
but the pointer can point to other offsets within the frame. To more efficiently access data in large stack frames, a routine can
establish another frame pointer.
A routine does not need to set up a stack frame unless it needs to save permanent registers, or to allocate space for locals
or outgoing argument areas that are bigger than four words. The stack pointer and frame pointer addresses align on 4-
byte boundaries.
If a routine has alloca() locals, the ARM specification requires a separate frame pointer register to access incoming
arguments and locals.
R11 is the assigned frame pointer for ARM, and R7 is the assigned frame pointer for THUMB.
A leaf routine can use any free integer register as the frame pointer. A nonleaf routine must use a permanent register.
The routine must not modify the frame pointer register between the prolog and epilog.
If a routine uses alloca(), everything in the frame at a lower address than the alloca() area is referenced relative to R13
and never contains a defined value at the time of an alloca() call. Thus, the alloca() operation never needs to copy this
part of the stack frame, and no data relocation problems arise.
Everything in the frame at an address higher than the alloca() area is referenced relative to the frame pointer, R11 for
ARM or R7 for THUMB.
See Also
Concepts
ARM Registers
Smart Device Development

ARM Prolog and Epilog


ARM Prolog and Epilog
ARM prolog and epilog code segments are required to implement Structured Exception Handling (SEH) for ARM
microprocessors. The ARM prolog is a code segment that sets up the stack frame for a routine. The epilog removes the routine
frame and returns from the routine.
In This Section
ARM Prolog
Describes the requirements of an ARM prolog, and provides an example.
ARM Epilog
Describes the requirements of an ARM epilog, and provides an example.
THUMB Prolog
Describes the requirements of an THUMB prolog, and provides an example.
THUMB Epilog
Describes the requirements of an THUMB epilog, and provides an example.
ARM Assembler Macros
Provides reference information about the ARM Assembler macros used to define the ARM and THUMB prolog and epilog
sequences.
Related Sections
ARM Calling Sequence Specification
Provides links to reference information about the ARM calling sequence specification.
SEH in RISC Environments
Describes the implementation of Structured Exception Handling in RISC environments such as ARM.
Smart Device Development

ARM Prolog
ARM Prolog
The ARM prolog has three constituent parts. All parts are immediately contiguous, with no intervening instructions. When the
prolog follows this guideline, the Virtual Unwinder can reverse-execute the prolog.
The following list shows the three required parts of an ARM prolog.
1. A sequence of zero or one instructions that push the incoming argument values from R0, R1, R2, and R3 to the
argument home locations, and updates R13 to the new stack top.
This sequence saves all permanent registers in descending order at the top of the stack frame, following any saved
argument registers.
2. A sequence of one or more instructions that set up the frame pointer, if one is to be established.
The prolog copies stack pointer R13 to R12 before the initial register saves and uses R12 to compute the value of the
frame pointer, R11.
3. A sequence of zero or more instructions that allocate the remaining stack frame space for local variables, compiler-
generated temporaries, and the argument build area by subtracting a 4-byte aligned offset from R13.
If an offset is too wide to represent in the immediate field, the prolog uses the scratch register R12 to hold the offset. In
this case, it sets the value in R12 with a different instruction.
Examples
The following examples show how to construct several ARM prologs.
ARM Prolog with frame in R11.
MOV r12, r13 ; Save stack on entry if needed.
STMDB r13!, {r0-r3} ; As needed
STMDB r13!, {r4-r12, r14} ; As needed
SUB r11, r12, #16 ; Sets frame past args
<stack link if needed>

ARM Prolog with no frame.


MOV r12, r13
STMDB r13!, {r0-r3} ; As needed
STMDB r13! {[r4-r12,]|[r13,]r14} ; As needed
<stack link if needed>
<note: r12 is not used if the stack (r13) is the first register saved>

See Also
Concepts
SEH in RISC Environments
ARM Epilog
Smart Device Development

ARM Epilog
ARM Epilog
The ARM epilog is a contiguous sequence of instructions that does the following:
Restores the saved permanent registers
Resets the stack pointer to its value on function entry
Returns to the function's calling function
The following list shows the guidelines for implementing an epilog:
All parts are immediately contiguous, with no intervening instructions.
If a frame pointer is set up, the epilog is a single instruction that uses the frame as the base and updates all nonvolatile
registers, including the Program Counter and the stack.
If no frame is set up, the epilog consists of a stack unlink, if needed, followed by an instruction to restore multiple
registers or to copy the link register R14 to the program counter.
If the function establishes a frame pointer (which has the value of R11 for an ARM epilog), the function must not modify
the pointer value during the interval between the completion of the prolog's last instruction and the beginning of the
execution of the first instruction of the epilog.
If the function does not establish a frame pointer (which has the value of R13), the function must not modify the stack
pointer during the interval between the completion of the prolog's last instruction and the beginning of the execution of
the first instruction of the epilog.
In a routine that does not modify nonvolatile registers and is not interworking, the epilog contains only a copy of the link
register to the program counter.
A routine whose last instruction is a branch to another routine can have an empty epilog if it does not modify nonvolatile
registers.
The address contained in the stack pointer, which always has the value of R13, must never be greater than the lowest
address of any unrestored register value in the Register Save Area.
This prevents the preserved values of the permanent registers from being corrupted by a context switch or any other
asynchronous event that might occur during the execution of a prolog or epilog.
Example
The following examples show a variety of ARM epilogs.
ARM Epilog with frame in R11.
<no stack unlink>
LDMDB r11, {r4-r11, r13, r15}

ARM Epilog with no frame.


<stack unlink if needed>
LDMIA r13, {r4-R11, r13, r15}

ARM Epilog with interworking return.


<stack unlink if needed>
LDMIA r13, {r4-r11, r13, LR}
BX LR

See Also
Concepts
SEH in RISC Environments
ARM Prolog
Smart Device Development

THUMB Prolog
THUMB Prolog
A THUMB prolog has the following specific parts. All parts are immediately contiguous with no intervening instructions.
A sequence of zero or one instructions that push the incoming argument values in R0, R1, R2, and R3 to the argument
home locations, and updates R13 to the new stack top.
If the function does not use high registers such as R8, R9, R10, and R11, a sequence of instructions pushes R4-R7 or the
link register R14 to the stack.
The function does not push the link register if the routine is a leaf with no high registers saved.
A sequence of zero or more instructions that allocate the remaining stack frame space for local variables, compiler-
generated temporaries, and the argument build area by subtracting an aligned offset from R13.
A single instruction that sets the frame pointer if one is to be established.
Immediately after it links the stack, the function copies the value of the stack pointer in R13 to R7.
Example
The following examples show a variety of THUMB prologs.
THUMB Prolog with no frame.
PUSH {r0-r3} ; As needed
PUSH {r4-r7, LR} ; As needed
SUB SP, SP, #4 ; Stack link (as needed)

THUMB Prolog with frame in R7.


PUSH {r0-r3} ; As needed
PUSH {r4-r7, LR} ; As needed
SUB SP, SP, #4 ; Stack link (as needed)
MOV r7, SP ; Set frame

THUMB Prolog with interworking return.


PUSH {r4-r7, LR}

THUMB Prolog saving high registers.


PUSH {r0-r3} ; Save r0-r3 as needed
PUSH {LR}
BL __savegpr_9 ; Routine for saving {r4-r11}
SUB SP, SP, #4 ; Stack link (as needed)

THUMB Prolog with a large stack frame.


PUSH {r7}
LDR r7, [PC, #20]
NEG r7, r7
ADD SP, r7

See Also
Concepts
SEH in RISC Environments
THUMB Epilog
Smart Device Development

THUMB Epilog
THUMB Epilog
The THUMB epilog is a contiguous sequence of instructions that does the following:
Restores the saved permanent registers
Resets the stack pointer to its value on function entry
Returns to the function's calling function
The following list shows important information about an epilog.
If a frame pointer has been set up by the prolog, the epilog restores the stack pointer from the frame pointer. It uses a
single mov instruction to copy R7 to R13. This copy restores R13 to the value it had just after the prolog linked the
stack.Unlinking the stack restores R13.
If {R4-R7} are to be restored, and if high registers are not to be restored, the epilog must contain an instruction to pop
{R4-R7}. This instruction updates the stack pointer. If the Unwinder restores high registers, it also restores R4-R7.
The epilog contains a sequence of zero or two instructions that pop the link register from the stack into R3.
If the routine is a leaf or if the routine restores high registers, the epilog omits this sequence.
If the epilog restores high registers, it uses a branch and link to call a restore-register routine that restores R4 through R7
and the link register. It also restores the stack pointer to the value it held just after the prolog saved {R0-R3}, or to the
value the stack pointer held on entry of the function if { R0-R3} were saved.
In a non-interworking routine that does not need to save registers other than { R4-R7,LR}, the epilog ends with pop {R4-
R7, PC} or pop { PC } if { R4-R7} do not need to be saved. If a noninterworking routine needs to save other registers, the
epilog ends with a copy of R3 to the PC.
In an interworking routine, the epilog ends with a branch and exchange (BX) to R3.
Example
The following examples show a variety of THUMB epilogs.
THUMB Epilog with no frame.
ADD SP, SP, #4 ; Stack link (as needed)
POP {r4-r7}
POP {r3} ; POP link register into r3
ADD SP, SP, #16 ; POP r0-r3 as needed
MOV PC, r3

THUMB Epilog with frame in R7.


MOV r13, r7
ADD SP, SP, #4 ; Stack unlink (as needed)
POP {r4-r7}
POP {r3} ; POP link register into r3
ADD SP, SP, #16 ; POP r0-r3 as needed
MOV PC, r3

THUMB Epilog restoring high registers.


ADD SP, SP, #4 ; Stack link (as needed)
BL __restgpr_9
ADD SP, SP, #16 ; POP r0-r3 as needed
BX LR

THUMB Epilog with a large stack frame.


LDR r7, [PC, #4]
ADD SP, r7
POP {r7}
MOV PC, LR

See Also
Concepts
SEH in RISC Environments
THUMB Prolog
Smart Device Development

ARM Assembler Macros


ARM Assembler Macros
ARM assembler-level macros are required to implement prolog and epilog code segments.
The following assembler level macros are available for ARM microprocessors.
Macro Description
ALTERNATE_ENTRY (ARM) Declares an alternate entry to a routine.

END_REGION (ARM) Marks the end of a contiguous range of text or data.

ENTRY_END (ARM) Ends the routine that was specified by a prior NESTED_ENTRY (ARM).

EXCEPTION_HANDLER (ARM) Associates a named exception handler with the subsequent NESTED_ENTRY (ARM).

EXCEPTION_HANDLER_DATA (A Associates a named exception handler and the handler data with the subsequent NESTED_EN
RM) TRY (ARM).

LEAF_ENTRY (ARM) Declares the beginning of a routine that does not require prolog code.

NESTED_ENTRY (ARM) Declares the beginning of a routine that either has an existing stack frame or that creates a st
ack frame.

PROLOG_END (ARM) Marks the end of the prolog area.

START_REGION (ARM) Marks the beginning of a contiguous range of text or data.


See Also
Concepts
ARM Registers
ARM Stack Frame Layout
Other Resources
ARM Prolog and Epilog
Smart Device Development

ALTERNATE_ENTRY (ARM)
ALTERNATE_ENTRY (ARM)
This macro declares an alternate entry to a routine of type NESTED_ENTRY (ARM) or LEAF_ENTRY (ARM).

ALTERNATE_ENTRY Name[,[Section=]SectionName]

Parameters
Name
The entry point.
SectionName
The name of the section where the entry appears; see Remarks.
Return Value
None.
Remarks
Name is in the global name space.
The ALTERNATE_ENTRY macro does not use the SectionName parameter. The parameter is accepted and ignored for
consistency with NESTED_ENTRY (ARM) and LEAF_ENTRY (ARM).
If used, an ALTERNATE_ENTRY call must appear in the body of a routine.
See Also
Reference
NESTED_ENTRY (ARM)
LEAF_ENTRY (ARM)
Smart Device Development

END_REGION (ARM)
END_REGION (ARM)
This macro marks the end of a contiguous range of text or data.

END_REGION NameEnd

Parameters
NameEnd
NameEnd labels the end of the range.
Return Values
None.
Remarks
NameEnd is in the global name space.
See Also
Reference
START_REGION (ARM)
Smart Device Development

ENTRY_END (ARM)
ENTRY_END (ARM)
This macro ends the current routine specified by NESTED_ENTRY (ARM) or LEAF_ENTRY (ARM).

ENTRY_END [Name]

Parameters
Name
See Remarks.
Return Values
None.
Remarks
Name should be the same name used in the NESTED_ENTRY or LEAF_ENTRY macros.
The ENTRY_END macro ignores Name.
See Also
Reference
NESTED_ENTRY (ARM)
LEAF_ENTRY (ARM)
Smart Device Development

EXCEPTION_HANDLER (ARM)
EXCEPTION_HANDLER (ARM)
This macro associates an exception handler Handler with a subsequent NESTED_ENTRY (ARM) or LEAF_ENTRY (ARM) routine.

EXCEPTION_HANDLER Handler

Parameters
Handler
Name of the exception handler.
Return Values
None.
Remarks
This association is in effect until the compiler encounters a matching ENTRY_END (ARM) macro.
See Also
Reference
NESTED_ENTRY (ARM)
LEAF_ENTRY (ARM)
ENTRY_END (ARM)
EXCEPTION_HANDLER_DATA (ARM)
Smart Device Development

EXCEPTION_HANDLER_DATA (ARM)
EXCEPTION_HANDLER_DATA (ARM)
This macro associates an exception handler Handler and HandlerData with a subsequent NESTED_ENTRY (ARM) or
LEAF_ENTRY (ARM) routine.

EXCEPTION_HANDLER_DATA Handler, HandlerData

Parameters
Handler
Name of the exception handler.
HandlerData
String associated with the exception handler.
Return Values
None.
Remarks
This association is in effect until compiler encounters a matching ENTRY_END (ARM) macro.
See Also
Reference
NESTED_ENTRY (ARM)
LEAF_ENTRY (ARM)
ENTRY_END (ARM)
EXCEPTION_HANDLER (ARM)
Smart Device Development

LEAF_ENTRY (ARM)
LEAF_ENTRY (ARM)
This macro declares the beginning of a routine that does not require prolog code.

LEAF_ENTRY Name[,[Section=]SectionName]

Parameters
Name
The routine name.
SectionName
Optional. The name of the section where the entry appears.Defaults to .text.
Return Values
None.
Remarks
Name is in the global name space.
A LEAF_ENTRY must have an associated ENTRY_END (ARM).
See Also
Reference
ENTRY_END (ARM)
PROLOG_END (ARM)
Smart Device Development

NESTED_ENTRY (ARM)
NESTED_ENTRY (ARM)
This macro declares the beginning of a routine that either has an existing frame or creates a stack frame.

NESTED_ENTRY Name[,[Section=]SectionName]

Parameters
Name
The routine name.
SectionName
Optional. The name of the section where the entry appears.Defaults to text.
Return Values
None.
Remarks
Name is in the global name space.
A NESTED_ENTRY must have an associated PROLOG_END (ARM) and ENTRY_END (ARM).
See Also
Reference
ENTRY_END (ARM)
PROLOG_END (ARM)
Smart Device Development

PROLOG_END (ARM)
PROLOG_END (ARM)
This macro marks the end of the prolog area.

PROLOG_END

Parameters
None.
Return Values
None.
Remarks
This macro must appear following a NESTED_ENTRY (ARM) or LEAF_ENTRY (ARM) macro.
It appears after the prolog area and before the matching ENTRY_END (ARM) macro.
See Also
Reference
NESTED_ENTRY (ARM)
LEAF_ENTRY (ARM)
ENTRY_END (ARM)
Smart Device Development

START_REGION (ARM)
START_REGION (ARM)
This macro marks the beginning of a contiguous range of text or data.

START_REGION NameBegin

Parameters
NameBegin
NameBegin labels the beginning of the range. NameBegin is in the global name space.
Return Values
None.
See Also
Reference
END_REGION (ARM)
Smart Device Development

THUMB-enabled ARM Implementation


THUMB-enabled ARM Implementation
THUMB-enabled ARM microprocessors can execute 16-bit THUMB instructions in addition to the usual 32-bit ARM
instructions.
To execute THUMB instructions, switch the microprocessor into THUMB mode. To resume executing ARM instructions, switch
the microprocessor back into ARM mode. The instruction that accomplishes the mode switch is the branch and exchange (BX)
instruction.
To call a function compiled by the THUMB compiler from within a function compiled by the ARM compiler, the code sequence
must include a BX instruction on the caller side and on the callee side.
The BX instruction is of the form BX Rx, where Rx,is a register containing an address.
If the low bit of the BX target address is set, BX causes a switch into THUMB mode.
If the low bit of the BX target address is not set, BX causes a switch into ARM mode.
The linker sets the low bit of THUMB function addresses at link time.
The ARM C/C++ compiler supports function calls and returns for ARM/THUMB interworking. The following mechanisms
support interworking.
Compiler flags
Language extensions by way of interworking declspec modifiers
Link-time generation of thunking routines
The use of an interworking calling sequence allows but does not require a mode switch to occur.
In addition, a THUMB function can call another THUMB function and an ARM function can call another ARM function through
an interworking calling sequence.
See Also
Reference
Compiler Flags for Interworking
Concepts
Modifiers
Linker-Generated Thunking Routines
Code Size Considerations
Smart Device Development

Compiler Flags for Interworking


Compiler Flags for Interworking
The following compiler flags apply to the creation of interworking programs.
The /QRinterwork-return - Enable Interworking flag causes all function returns in a file to be made interworking.
This flag has no effect on function calls.
The /QRArch - Specify Target Architecture flag allows the compiler to generate instructions that are only available on
THUMB-enabled microprocessors, such as BX.
For THUMB, this flag is on by default.
For ARM, this flag is off by default.
The /QRinterwork-return flag enables the /QRarch flag.
See Also
Concepts
THUMB-enabled ARM Implementation
Smart Device Development

Modifiers
Modifiers
ARM and THUMB support Microsoft-specific modifiers for interworking. The iwcall, iw16, and iw32 declspecs allow you to
select which function calls are interworking.
Compared to a linker-generated thunking routine, the iwcall or iw16 declspecs always result in faster code for interworking
calls. The declspecs add only a single MOV instruction to the execution path, while a linker-generated thunking routine adds
two instructions: a load from memory, and a branch.
See Also
Concepts
THUMB-enabled ARM Implementation
Linker-Generated Thunking Routines
Smart Device Development

iw16
iw16
When compiled by the ARM compiler, the iw16 declspec has the same effect as the iwcall declspec; that is, it makes an
interworking call.
When compiled by the THUMB compiler, the iw16 declspec has no effect.
Use the iw16 declspec only when you know which compiler, ARM or THUMB, will compile the designated function.
iw16 declspec has no effect on the ARM compiler unless you also use the /QRArch - Specify Target Architecture flag.
Using the /QRinterwork-return - Enable Interworking flag automatically enables the /QRarch flag.
See Also
Reference
iwcall
iw32
/QRinterwork-return - Enable Interworking
/QRArch - Specify Target Architecture
Concepts
Modifiers
Smart Device Development

iw32
iw32
When compiled by the THUMB compiler, the iw32 declspec has the same effect as the iwcall declspec; that is, it makes an
interworking call.
When compiled by the ARM compiler, the iw32 declspec has no effect.
Use the iw32 declspec only when you know which compiler, ARM or THUMB, will compile the designated function.
See Also
Reference
iwcall
iw16
Concepts
Modifiers
Smart Device Development

iwcall
iwcall
The iwcall declspec allows the programmer to select which function calls are interworking, regardless of whether the ARM or
THUMB compiler is used.
Using iwcall allows you to avoid link-time generation of interworking thunking routines.
Note that iwcall has no effect unless it is used on a function prototype visible to the caller.
The iwcall declspec does not cause the associated function to have an interworking return. To make an interworking return,
use the -/QRinterwork-return - Enable Interworking flag.
You can use __declspec(iwcall) on the prototype of the user-supplied function to enable the library to handle either case.
The following code example shows how to use of iwcall declspec to enable a user-supplied function myfunction().

__declspec(iwcall) int myfunction();


int main()
{
return myfunction();
}

The following listing shows the code generated from this declspec when compiled with /QRArch - Specify Target Architecture.

str lr, [sp, #4]!


ldr r3, [pc, #8]
mov lr, pc
bx r3
ldmia sp!, {pc}
DCD |myfunction|

The following listing shows the code generated with the ARM compiler using the /QRthumboption.

push {lr}
ldr r3, [pc, #0x2]
mov r12, r3
bl __r12_indirect
pop {pc}
DCD |myfunction|

See Also
Reference
/QRinterwork-return - Enable Interworking
/QRArch - Specify Target Architecture
Concepts
Modifiers
Smart Device Development

Linker-Generated Thunking Routines


Linker-Generated Thunking Routines
If no declspec call enables interworking function calls, the linker generates a thunking routine to perform necessary caller-side
mode changes from ARM to THUMB or vice versa. The linker generates a thunking routine for each unique function called
from an object that requires the opposite mode.
For the required mode switch to occur on the return from the function, the programmer must use the /QRinterwork-return -
Enable Interworking flag at compile time.
The following code example shows a linker-generated thunking routine generated when switching from ARM to THUMB mode.

0xe59fc000 ldr r12, [pc]


0xe12fff1c bx r12
0x00000000 DCD |destination|

The following code example shows the linker-generated thunking routine generated when switching from THUMB to ARM
mode.

0xb408 push {r3}


0x4b02 ldr r3, [pc, #8]
0x469c mov r12, r3
0xbc08 pop {r3}
0x4760 bx r12
0x0000 pad
0x00000000 DCD |destination|

See Also
Reference
/QRinterwork-return - Enable Interworking
/QRArch - Specify Target Architecture
Smart Device Development

Code Size Considerations


Code Size Considerations
Both declspec modifiers and linker-generated thunking routines add additional 32-bit words of text-space instruction.
In general, if a program contains only a few interworking functions, but the interworking functions are called from many
places; a linker-generated thunking routine probably results in smaller overall code size.
If a program contains many different interworking functions, but the interworking functions are called from only a few places,
using iwcall or iw16 results in code size similar to that required by a linker-generated thunking routine.
If code size efficiency is important, keep in mind the following additional word requirements:
The iwcall and iw16 declspecs require an additional 32-bit word of text-space instruction per interworking call.
Because the function address must be placed into and loaded from the literal pool, the function address can add up to
two 32-bit words of text space instruction to the space required by the linker-generated thunking routine.
Because different load instructions can share a given literal pool entry, some function calls do not add words for a
declspec. The literal pool entry can be loaded into a register that different BX instructions use without reloading the
register.
Allowing the linker to generate a thunking routine for the ARM compiler requires three additional 32-bit words per called
function but no additional words at the call sites. A linker-generated thunking routine for the THUMB compiler requires
four words instead of three.
Note:
Regardless of how many different callers call a function, the linker generates only one interworking thunking routine p
er function call.

See Also
Concepts
Linker-Generated Thunking Routines
Modifiers
Smart Device Development

ARM Assembler
ARM Assembler
The ARM assembler (armasm) is a two-pass assembler, processing its source files twice to reduce the amount of internal state
that it needs to keep.
The ARM assembler compiles both ARM and Thumb assembly language into the Microsoft implementation of the Common
Object File Format (COFF).
In This Section
ARM Assembler Command-Line Options
Describes the command-line syntax for invoking the ARM Assembler, and describes the command-line options.
Predeclared ARM Register Names
Provides reference information about register names that the ARM Assembler pre-declares.
Built-In ARM Assembler Variables
Provides reference information about variables that have built-in definitions for the ARM Assembler.
ARM Assembler Directives
Describes the assembler directives.
Related Sections
ARM Family Processors
Smart Device Development

ARM Assembler Command-Line Options


ARM Assembler Command-Line Options
The syntax of a command to invoke the ARM assembler is as follows:

armasm {options} sourcefile objectfile

The following table shows command-line options for the ARM assembler.
Option Description
-archarchitecture Sets the target architecture. Legitimate values are 4, 4T, 5, and 5T.
Some microprocessor-specific instructions produce errors or warnings if assembled for the wrong tar
get architecture.

-checkreglist Checks LDM and STM register lists to ensure that register number order is increasing.
If not, a warning is given.
You can use -checkreglist to detect misuse of symbolic register names.

-cpu ARMcore Sets the target ARM core.


Legitimate values include the following:
ARM7TM
ARM720t
ARM920t
ARM8
ARM10
ARM10T
ARM10200
StrongARM or StrongARM1
XSCALE
PXA270
Some microprocessor-specific instructions produce warnings if assembled for the wrong ARM core.

-errors errorfile Outputs error messages to errorfile.

-help Displays a summary of the command-line options.

-i dir{,dir} Specifies directories to include.


Directories can also be specified by using the INCLUDE environment variable.

-ignore 0241 -archarch Instructs the build process to ignore warning message 0241 for an instruction not implemented on th
itecture e specified target architecture.

-list listingfile-noterse Turns the terse flag off.


When the terse flag is on, lines skipped due to conditional assembly do not appear in the listing.
When the terse flag is off, these lines appear in the listing.
The default is on.
-list listingfile-width n Sets the listing page width.
The default is 79 characters.

-list listingfile-length n Sets the listing page length.


Length 0 means an unpaged listing.
The default is 66 lines.

-list listingfile-xref Lists cross-referencing information on symbols.


Provides definition location and usage location inside and outside of macros.
The default is off.

-noesc Ignores C-style special characters (\n, \t, and so on).

-noregs Tells the assembler not to predefine implicit register names r0–r15, a1–a4, v1–v6, c0–c15,
p0–p15, sl, fp, ip, sp, lr, pc.

-nowarn Turns off warning messages.

-predefine "directive" Pre-executes a SETx directive.


This implicitly executes a corresponding GBLx directive.
Because it contains spaces, place the full SETx argument in quotation marks. For example:
-predefine "Version SETA 44"

-Via file Opens file and reads in more armasm command-line arguments.
See Also
Reference
Predeclared ARM Register Names
Built-In ARM Assembler Variables
Other Resources
ARM Assembler
Smart Device Development

Predeclared ARM Register Names


Predeclared ARM Register Names
By default, the assembler predeclares the following register names:
R0–R15 and r0–r15
c0–c15 coprocessor registers
p0–p15 coprocessor registers
a1-a4 scratch registers, synonymous with r0-r3
v1-v8 variable registers, synonymous with r4-r11
sb and SB stack base, synonymous with r9
sl and SL stack base, synonymous with r10
fp and FP frame pointer, synonymous with r11
ip and IP intra-procedure call scratch register, synonymous with r12
sp and SP stack pointer, synonymous with r13
lr and LR link register, synonymous with r14
pc and PC program counter, synonymous with r15
s0-s32 VFP single precision registers
d0-d16 VFP double precision registers
fpsid VFP system ID register
fpscr VFP status and control register
fpexc VFP exception register
wr0-wr16 WMMX SIMD data registers
wc0-wc16 WMMX status and control registers
wcid WMMX coprocessor ID register, synonymous with wc0
wcon WMMX control register, synonymous with wc1
wcssf WMMX saturation SIMD flags, synonymous with wc2
wcasf WMMX arithmetic SIMD flags, synonymous with wc3
wcgr0-wcgr3 WMMX control general purpose registers, synonymous with wc8-wc11
See Also
Reference
Built-In ARM Assembler Variables
Other Resources
ARM Assembler
Smart Device Development

Built-In ARM Assembler Variables


Built-In ARM Assembler Variables
The ARM assembler contains built-in variables for programmer convenience.
The following table shows the built-in variable definitions.
Variable Description
{PC} or . Contains the current value of the program location counter.

{VAR} or @ Contains the current value of the storage area location counter.

{TRUE} Contains the logical constant true.

{FALSE} Contains the logical constant false.

{OPT} Contains the value of the currently set listing option.


The OPT directive can be used to save the current listing option, force a change in it, or restore its original val
ue.

{CONFIG} Has the value 32 if the assembler is in 32-bit program counter mode, and the value 26 if it is in 26-bit mode.

{ENDIAN} Has the value "big" if the assembler is in big-endian mode and the value "little" if it is in little-endian mode.

{CODESIZE} Has the value 16 if compiling Thumb code. Otherwise, it is 32.

{CPU} Has the name of the selected CPU or generic ARM if no CPU is specified.

{ARCHITECTURE Has the value of the selected ARM architecture: 4 or 4T.


}
See Also
Reference
Predeclared ARM Register Names
Other Resources
ARM Assembler
Smart Device Development

ARM Assembler Directives


ARM Assembler Directives
The ARM assembler supports a full array of assembler directives that allow you to control and direct source file assembly.
In This Section
ARM Initialization and Layout Directives
ARM Linking Directives
ARM Diagnostic Directives
ARM Directives for Conditional Assembly
ARM Dynamic Listing Directive Options
ARM-Thumb Interworking Directives
ARM Constant and Variable Declarations
ARM Assembler Directives for Macro Definition
Miscellaneous ARM Directives
Related Sections
ARM Assembler Command-Line Options
Predeclared ARM Register Names
Built-In ARM Assembler Variables
ARM Assembler Error Messages
Smart Device Development

ARM Initialization and Layout Directives


ARM Initialization and Layout Directives
The AREA directive instructs the assembler to assemble a new code or data sections, used in an expression of the following
form:
AREA sectionname{,attr}{,attr}...

The AREA sectionname expression is modified by one or more comma-delimited attributes.


The following table shows the valid attributes for an AREA directive.
Attrib Description
ute
ALIGN Defines the section boundary, where the section is aligned on a 2expression -byte boundary.
expression can have any integer value from 0 to 31. Do not use ALIGN=0 or ALIGN=1 for code sections.
Note that the ALIGN attribute is not the same as the ALIGN directive.

CODE Contains machine instructions. READONLY is the default.

DATA Contains data, not instructions. READWRITE is the default.

NOINI Indicates that the data section is uninitialized, or initialized to zero. It contains only space reservation directives SPACE
T or DCB, DCD< DCDU, DCQ, DCQU, or DCWU with initialized values of zero.

READO Indicates that this section should not be written to. This is the default for CODE areas.
NLY

READ Indicates that this section can be read from and written to. This is the default for DATA areas.
WRITE
See Also
Reference
ARM Initialization and Layout Directives
Smart Device Development

ARM Linking Directives


ARM Linking Directives
The following ARM assembly directives link other files to the current assembly.
Direc Syntax Description
tive
EXPO EXPORT symbol{[FPREGA Declares a symbol for use at link time by other, separate object files.
RT RGS,DATA,LEAF]}
FPPREGARGS defines a function that expects fp arguments passed in fp registers.
DATA defines a code-segment datum rather than a function or procedure.
LEAF causes asserts that call other functions.
Identical to the GLOBAL directive.

GET GET filename Includes an additional file named filename within the current file assembly.
The included file can in turn use GET directives to include more files.
When assembly of the included file is complete, assembly continues at the line foll
owing the GET directive.

GLOB GLOBAL symbol{ Declares a symbol for use at link time by other, separate object files.
AL [FPREGARGS,DATA,LEAF]
} FPPREGARGS defines a function that expects fp arguments passed in fp registers.
DATA defines a code-segment datum rather than a function or procedure.
LEAF causes asserts that call other functions.
Identical to the EXPORT directive.

IMPO IMPORT symbol{ Provides the assembler with a name, symbol.


RT WEAK=weak-symbol, {ty
pe=n}} The assembly does not contain a definition for symbol, but resolves it at link time t
o a symbol defined in a separate object file.
The routine treats symbol as a program address.

INCL INCLUDE filename Specifies a synonym for GET.


UDE
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Diagnostic Directives


ARM Diagnostic Directives
The following ARM assembly directives generate diagnostic information.
Dire Syntax Description
ctive
ASSE ASSERT logical-expressi Supports diagnostic generation.
RT on
If logical-expression returns FALSE, the assembler generates a diagnostic messag
e during the second pass of the assembly.
ASSERT can be used inside and outside macros.

! ! arithmetic-expression Related to ASSERT, but is inspected on both passes of the assembly, providing a
, string-expression more flexible means for creating custom error messages.
If arithmetic-expression equals 0, the assembler takes no action during pass one,
but prints string-expression as a warning during pass two.
If arithmetic-expression does not equal 0, the assembler prints string-expression
as a diagnostic message. The assembly halts after pass one.
This directive is identical to the INFO directive.

INFO INFO arithmetic-express If arithmetic-expression equals 0, the assembler takes no action during pass one.
ion, string-expression
It adds source file and line number as a prefix to string-expression, and prints the
result as a warning during pass two.
If arithmetic-expression does not equal 0, the assembler prints string-expression
as a diagnostic message. The assembly halts after pass one.
This directive is identical to the ! directive.
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Directives for Conditional Assembly


ARM Directives for Conditional Assembly
The ARM assembler supports conditional assemblies for sections of a source file; that is, it assembles the specified sections if
certain conditions are true.
In addition, the assembler supports WHILE...WEND directives for conditional looping that are useful for generating repetitive
tables.
Conditional looping produces an assembly-time loop, not a run-time loop. Because the test for the WHILE condition is made at
the top of the loop, it is possible that no code is generated during assembly; lines are listed as for conditional assembly.
The following ARM assembler directives are required for conditional and repetitive assembly.
[ or IF
Marks the start of the condition.
] or ENDIF
Marks the end of the condition.
| or ELSE
Provides an else construct.
WHILE
Marks the start of the repetitive condition.
WEND
Marks the end of the repetitive condition.
Note that the characters [, |, and ] cannot be the first character in a line. These characters must be preceded by a space or a tab.
The following code shows the syntax for conditional assembly.

[ logical-expression
...code...
|
...code...
]

The following code shows the syntax for repetitive assembly.

WHILE logical-expression
...code...
WEND

See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Dynamic Listing Directive Options


ARM Dynamic Listing Directive Options
The OPT directive is used to set listing options from within the source code, if listing is turned on.
The default setting is to produce a normal listing, including the declaration of variables, macro expansions, call-conditioned
directives, and MEND directives, but without producing a listing during the first pass.
These settings can be altered by adding the appropriate values from the list and using them with the OPT directive, as shown
in the following table.
1
Turns on normal listing.
2
Turns off normal listing.
4
Page throw: issues an immediate form feed and starts a new page.
8
Resets the line number counter to 0.
16
Turns on the listing of SET, GBL, and LCL directives.
32
Turns off the listing of SET, GBL, and LCL directives.
64
Turns on the listing of macro expansions.
128

Turns off the listing of macro expansions.


256
Turns on the listing of macro calls.
512
Turns off the listing of macro calls.
1024
Turns on the first pass listing.
2048
Turns off the first pass listing.
4096
Turns on the listing of conditional directives.
8192
Turns off the listing of conditional directives.
16384
Turns on the listing of MEND directives.
32768
Turns off the listing of MEND directives.
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM-Thumb Interworking Directives


ARM-Thumb Interworking Directives
The following table shows the ARM-THUMB interworking directives.
CODE16
Tells the assembler that subsequent instructions are to be interpreted as 16-bit (Thumb) instructions.
CODE32
Tells the assembler that subsequent instructions are to be interpreted as 32-bit (ARM) instructions.
DATA
Tells the assembler that the label is a "data-in-code" label; that is, that it defines an area of data within a code segment. You
must specify this directive if you are defining data in a Thumb code area.
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Constant and Variable Declarations


ARM Constant and Variable Declarations
The following ARM Assembly directives are for setting constants.
Directi Syntax Description
ve
* label *expression Identical to EQU.
Gives a symbolic label to a fixed or program-relative expression.

CN label CN numeric-expr Names a coprocessor register number; c0 to c15 are predefined and cannot be u
ession sed as labels.

CP label CP numeric-expr Gives a name to a coprocessor number, if available, that must be within the rang
ession e 0 to 15.
The names p0 - p15 are predefined and cannot be used as labels.

EQU label EQU expression Gives a symbolic label to a fixed or program-relative expression.

FN label FN numeric-expr Defines the names of floating-point registers, if available.


ession
The names F0-F7 and f0-f7 are predefined.
The predefined register names cannot be used as labels but can be used as nume
ric expressions.

RN label RN numeric-expr Defines register names. Refer to registers by name only.


ession
The names R0-R15, r0-r15, PC, pc, LR, and lr are predefined.
The predefined register names cannot be used as labels but can be used as nume
ric expressions.

The assembler supports global and local variables. The scope of global variables extends across the entire source file, while that
of local variables is restricted to a particular instantiation of a macro.
The following table ARM assembly directives are for setting local and global variables.
Directive Syntax Description
GBLA GBLA variable-name Defines a global arithmetic variable.
Values of arithmetic variables are 32-bit unsigned integers.

GBLL GBLL variable-name Defines a global logical variable.

GBLS GBLS variable-name Defines a global string variable.

LCLA LCLA variable-name Defines a local arithmetic variable with an initial state of 0.

LCLL LCLL variable-name Defines a local logical variable with an initial state of FALSE.
LCLS LCLS variable-name Defines a local string variable with an initial state of NULL string.

SETA variable-name SETA expression Sets the value of an arithmetic variable.

SETL variable-name SETL expression Sets the value of a logical variable.

SETS variable-name SETS expression Sets the value of a string variable.

Note that when you set the value of a string variable, you must use quotes.
You can declare local variables only from within a macro. In addition, after you declare a variable, you cannot use its name for
any other purpose.
The assembler substitutes values for some variables:
If a variable name has a $ character prefix, the assembler substitutes the variable value before it checks the line syntax.
If the variable is a logical or arithmetic variable, the assembler performs an .STR operation on the variable, and replaces
the variable with the result of the operation.
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Assembler Directives for Macro Definition


ARM Assembler Directives for Macro Definition
Macros are useful when you need a group of instructions or directives frequently.
The ARM assembler replaces the macro name with its definition.
Macros can contain calls to other macros, nested up to 255 levels.
Two directives define a macro, MACRO and MEND.

MACRO
{$label}Â Â Â macroname {$parameter1}{,$parameter2}{,$parameter3}..
...code...
MEND

Remarks
A macro prototype statement must appear on the first line following the MACRO directive. The prototype tells the assembler
the name of the macro, macroname, and its parameters.
A label is optional, but is useful if the macro defines internal labels.
Any number of parameters can be used. Each must begin with $ to distinguish it from ordinary program symbols.
Within the macro body, $label, $parameter, and so on, can be used in the same way as other variables.
The $label parameter is treated as another parameter to the macro. The macro describes which labels are defined where. The
label does not represent the first instruction in the macro expansion.
For example, it is useful in a macro that uses several internal labels, such as a loop, to define each internal label as the base
label with a different suffix.
Sometimes, a value appends a macro parameter or label. Separate the appended value by a dot. After the assembler
recognizes the end of the parameter and label, the assembler ignores the dot. For example:

$label.1
$label.loop
$label.$count

Default values can be set for parameters by following them with an equal sign and the default value. If the default has a leading
or trailing space, the whole value should appear in quotes, as shown in the following code example.

...{$parameter="default value"}

The MEND directive signifies the end of the macro definition. If the macro contains WHILE/WEND loops, or contains
conditional assembly, the WHILE/WEND loop must close before execution reaches the MEND directive.
You can also terminate macro expansion with the MEXIT directive.
See Also
Other Resources
ARM Assembler Directives
Smart Device Development

Miscellaneous ARM Directives


Miscellaneous ARM Directives
The following table describes miscellaneous directives for the ARM assembler.
Dir Syntax Description
ecti
ve
ALI ALIGN {power-of- Sets the instruction location to the next word boundary.
GN two {,offset-exp
ression}} The optional power-of-two parameter can be used to align with a coarser byte boundary an
d the offset-expression parameter to define a byte offset from that boundary.

EN END Stops the processing of a source file.


D
If a GET directive invoked assembly of the file, the assembler returns and continues after the
GET directive.
If the assembler reaches an END directive in the top-level source file during the first pass an
d there are no errors, the second pass begins.
Absence of an END directive causes an error.

KEE KEEP {symbol} Retains a local symbol in the assembler's symbol table.
P
By default, the assembler does not describe local symbols in its output object file.
If the KEEP directive appears without a symbol parameter, the assembler keeps all symbols.
To keep a specific symbol, specify it by name.

LTO LTORG Directs the assembler to assemble the current literal pool that immediately follows the asse
RG mbly.
A default LTORG is executed at every END directive that is not part of a nested assembly.
Large programs might need several literal pools, each closer to the location of their literals t
o avoid violating LDR's 4-KB offset limit.

NO NOFP Disables floating point instructions.


FP
In some circumstances, there is no support in the target hardware or software for floating-p
oint instructions.

RLI label RLIST list Assigns a name to a set of registers to be transferred by LDM or STM.
ST -of-registers
List-of-registers is a comma-separated list of register names or ranges enclosed in braces.
If you select the -CheckReglist option, you must also supply a List-of-registers list, in increasi
ng order of register number.

RO {name}ROUT Marks the boundaries of the scope of local labels.


UT
name indicates the name to be assigned to the scope.
Use ROUT to limit the scope of local labels. This makes it easier for you to avoid referring to
a wrong label by accident. The scope of local labels is the whole area if there are no ROUT di
rectives in it.

SUB SUBT title Specifies a subtitle to be inserted on all pages until a new subtitle appears.
T
TTL TTL title Specifies a title to be inserted on all pages until a new title appears.

See Also
Other Resources
ARM Assembler Directives
Smart Device Development

ARM Assembler Error Messages


ARM Assembler Error Messages
This section contains descriptions of the ARM Assembler error messages.
In This Section
ARM Error Messages 1-50
ARM Error Messages 51-100
ARM Error Messages 101-150
ARM Error Messages 151-200
ARM Error Messages 201-250
Smart Device Development

ARM Error Messages 1-50


ARM Error Messages 1-50
The following table shows ARM error messages 1-150.
N Error Message Warning/Er Arguments
o. ror
1 Error None

2 :CHR: operator: truncation applied to a char Warning None

3 missing substitution operator $ for assembler variable Warning None


%s

4 reserved symbol used in an expression: %s Warning Symbol name

5 improper line syntax: %s Error Line with improper syntax

6 improper program syntax: %s Error Description of error

7 unimplemented class of instructions Error None

8 ARM register expected: %s Error String where the assembler tried to read a register

9 coprocessor number expected: %s Error String where the assembler tried to read a coprocess
or number

10 ARM coprocessor register expected: %s Error String where the assembler tried to read a coprocess
or register

11 ARM floating point register expected: %s Error String where the assembler tried to read a floating-p
oint register

12 wrong operand type for %s Error String with operand

13 divide by zero Error None

14 %s cannot be applied; different sections or different bas Error Text of operand


e registers

15 illegal symbol %s; AREA name expected Error None

15 illegal symbol %s; AREA name expected Error Symbol name

16 illegal flag(s) %s Error Token

17 illegal $ substitution, non assembler variable Error None

18 wrong character constant Error None

19 malformed string constant; missing closing Error None

19 malformed string constant; missing closing Error None


20 wrong escape constant; null value not permitted inside Error None
a string

20 wrong escape constant; null value not permitted inside Error None
a string

21 unexpected char Error None

22 wrong :: operator Error None

23 special bar id not closed Error None

24 wrong built-in variable Error None

25 wrong shift name Error None

26 unimplemented instruction set Error None

27 unaligned absolute value Warning None

28 truncation applied, absolute value should be word align Warning Offset value
ed: 0x%x

29 truncation applied, absolute value should be half-word Warning Offset value


aligned: 0x%x

30 address 0x%x is too large to represent in %d bits Error Address

31 address out of range in a different section Error None

32 immediate value %d cannot be represented in %d bits Error Offset

33 floating value %e cannot be represented in single precis Error Floating-point value


ion

34 undefined symbol: %s Error Symbol text

35 illegal expression type: %s Error Expression value

36 <%s> mnemonic qualifier is ignored Warning Instruction suffix

37 operand restriction violation (undefined behavior): %s Warning Instruction operand

38 multiple use of the same register in a register list Warning None

39 unsafe use of R15 as base register Warning None

40 unsafe use of write-back operator Warning None

41 unknown LDM/STM operation Error None

42 thumb register expected; %s Error Unexpected text

43 multiple symbol definition or incompatibility: %s Error Symbol name


44 cannot open file: %s Error File name

45 possible infinite loop due to recursive file inclusion: %s Warning File name

46 unknown command-line argument or argument value Warning Unknown argument


%s

47 command-line option not implemented; %s ignored Warning Command-line argument

48 multiple use of the same option: %s Warning Command-line argument

49 only one source file can be assembled: %s Error Source file name

50 missing input source file Error None


See Also
Other Resources
ARM Assembler Error Messages
Smart Device Development

ARM Error Messages 51-100


ARM Error Messages 51-100
The following table shows ARM error messages 51-100.
N Error Message Warning/ Arguments
o. Error
51 unknown opcode: %s Error String for OPCODE

52 minimum requested width of 34 assumed Warning None

53 wrong page length: %d, 0 (non paged) assumed Warning Page length

54 failed to close file %s Error File name

55 illegal line start symbol: %s for directive: %s Error Start symbol, directive

56 unimplemented directive %s Warning Directive name

57 %s attribute does not pertain to a relocatable module; ignored Warning Directive name

58 %s directive does not pertain to a relocatable module; ignored Warning Directive name

59 unknown section flag: %s Error Area name

60 illegal combination of section flags: %s Warning Section name and flags

61 redefinition of section flags ignored Warning None

62 ignored lines after END directive Warning None

63 missing END directive Warning None

64 code inside data section Error None

65 unknown or bad symbol type: %s Error Symbol

66 out of memory: section data: no object file will be generated Error None

66 out of memory: section data: no object file will be generated Error None

67 initialized data in an uninitialized data section %s Error None

68 assembler internal error; sync. error on local labels Error None

68 assembler internal error; sync. error on local labels Error None

69 error while generating object file: seek error Error None

69 error while generating object file: seek error Error None

70 input error: line is too long after expanding an assembler variable; truncated Error None
70 input error: line is too long after expanding an assembler variable; truncated Error None

71 macro error: END directive cannot appear inside a macro Error None

71 macro error: END directive cannot appear inside a macro Error None

72 wrong directive usage: local assembler variables can only be defined within Error None
a macro

73 wrong local label reference; reference expected after %% (usage: %%{x}{y}n{ Error None
name})

74 improper argument for <-predefine> command-line option: %s; %s Error None

75 non increasing order in the register list Warning None

76 the selected architecture and CPU (or mode) are conflicting: %s versus %s Warning Architecture, CPU

77 could not delete %s file Error File name

78 missing ENDP directive in section %s Error Section name

79 %s Error Internal use

80 %s %s Error Internal use

81 error Error None

82 warning Warning None

83 illegal expression type; expected absolute numeric Error None

84 illegal expression type; expected absolute numeric or program relative Error None

85 illegal expression type; expected absolute numeric, program relative or regis Error None
ter relative

86 illegal expression type; expected program relative or register relative Error None

87 illegal expression type; expected program relative Error None

88 illegal expression type; expected absolute numeric or string Error None

89 illegal expression type; expected absolute numeric or Boolean Error None

90 illegal expression type; expected bool Error None

91 illegal expression type; expected string Error None

92 no immediate rotate operand can be created: %d Error Values to rotate

93 immediate value %d out of range; expected values: %s Warning Immediate value, string contain ex
pected values
94 improper alignment value %d; expected: [1, 2, 4, 8,   ... 32768] Error Value

95 improper alignment value %d; alignment offset should be positive and smal Warning Value
ler than alignment; truncated

96 immediate value %d out of range; positive value expected Error Immediate value

97 immediate value %d out of range; truncated to 16 bits Warning Immediate value

98 immediate value %d out of range; truncated to 8 bits Warning Immediate value

99 literal pool too far, or too close: %d; address is 8 bit offset; use LTORG Error None

10 literal pool too far, or too close: %d; address is 12 bit offset; use LTORG Error None
0
See Also
Other Resources
ARM Assembler Error Messages
Smart Device Development

ARM Error Messages 101-150


ARM Error Messages 101-150
The following table shows ARM error messages 101-150.
N Error Message Warning/E Arguments
o. rror
10 improper shift amount: %d; must fit in 5 bits Error Immediate value
1

10 improper rotate amount: %d; rotate amount shifted right by 1 must fit 4bits Error Immediate value
2

10 improper rotate amount: %d; only even rotate amounts can be specified Error Immediate value
3

10 immediate value out of range: %d; coprocessor information must fit in 3 bits Error Immediate value
4

10 immediate value out of range: %d; coprocessor opcode must fit in 4 bits Error Immediate value
5

10 internal assembler error: unused error code Error None


6

10 improper line syntax, only <ldr> can be used to generate literals Error None
7

10 improper line syntax Error None


8

10 improper line syntax; EOL or comma expected Error None


9

11 improper line syntax; wrong offset Error None


0

11 improper line syntax; expected: %s Error Expected tokens for prope


1 r syntax

11 improper line syntax; SP or PC required as second register in this format Error None
2

11 improper line syntax; high registers are not accepted for SUB instruction Error None
3

11 improper line syntax; only SP register accepted for this format Error None
4

11 improper line syntax; unexpected comma Error None


5

11 improper line syntax; high registers not allowed in this context Error None
6
11 improper line syntax; wrong combination of mnemonic and operands Error None
7

11 improper line syntax; write back '!', expected (assumed) Error None
8

11 improper line syntax; opcode, directive or macro call expected Error None
9

12 improper line syntax; wrong use of a local label Error None


0

12 improper line syntax; %s directive cannot define a starting line symbol Error Directive name
1

12 improper line syntax; symbol expected Error None


2

12 improper line syntax; missing weak alias; symbol defined as external Warning None
3

12 improper line syntax; include file name expected Error None


4

12 improper line syntax; string expected Warning None


5

12 improper line syntax; %s option requires %s section name Warning Option, section name
6

12 improper line syntax; usage: %s Warning Line


7

12 improper line syntax; selection must be 5 if <assoc= ..> option is used Warning None
8

12 improper line syntax; bad macro call; macro definition does not have a label parame Warning None
9 ter

13 improper line syntax; macro call with too many actual parameters Warning None
0

13 improper line syntax; malformed macro call Warning None


1

13 improper line syntax; register list symbol or proper register list ({ .. }) expected Error None
2

13 improper line syntax; malformed register list construction Error None


3

13 improper line syntax; Error None


4
13 improper line syntax; Error None
5

13 improper line syntax; Error None


6

13 unexpected end of file in an include file/macro or missing END directive Error None
7

13 improper program syntax; missing ENDP directive or nested function definition Warning None
8

13 improper program syntax; unexpected ENDP directive Warning None


9

14 improper program syntax; unexpected MEND/MEXIT directive Warning None


0

14 improper program syntax; conditional if structure crosses file (include) structure Warning None
1

14 improper program syntax; (malformed/not closed) conditional if structure appears Error None
2

14 improper program syntax; end of file or macro in WHILE loop, or missing WEND Error None
3

14 improper program syntax; a WEND directive without a preceding WHILE Error None
4

14 improper program syntax; unbalanced WHILE-WEND construction, possibly due to Warning None
5 conditionals and includes

14 improper program syntax; an ENDIF directive without a corresponding IF Error None


6

14 improper program syntax; an ELSE directive without a corresponding IF Error None


7

14 improper program syntax; malformed conditional structure, possibly two ELSE key Error None
8 words in an IF construct

14 improper program syntax; nested macro definitions are not supported Error None
9

15 improper program syntax; read error or missing macro definition line Error None
0
See Also
Other Resources
ARM Assembler Error Messages
Smart Device Development

ARM Error Messages 151-200


ARM Error Messages 151-200
The following table shows ARM error messages 151-200.
N Error Message Warning/E Arguments
o. rror
15 improper program syntax; MEND, MEXIT directives do not have any label or prefixing text Warning None
1

15 improper program syntax; read error, missing MEND directive or end of file inside a macro d Error None
2 efinition

15 improper program syntax; malformed macro definition (unrecoverable) Error None


3

15 improper program syntax; associated COMDAT section not found Error None
4

15 improper program syntax; attempt to redefine the associated COMDAT section; ignored Error None
5

15 routine name does not match the enclosing routine structure Error None
6

15 improper argument for <-predefine> command-line option: name expected Error None
7

15 improper argument for <-predefine> command-line option: %s; symbol name expected Error Command-line o
8 ption

15 improper argument for <-predefine> command-line option: SETx expected Error None
9

16 improper argument for <-predefine> command-line option; undefined symbol in expression Error None
0

16 improper argument for <-predefine> command-line option: malformed or unrecognized ex Error None
1 pression

16 improper argument for <-predefine> command-line option: expression type mismatch Error None
2

16 assembler internal error; Sync. error on ROUT areas Error None


3

16 assembler internal error; symbol sync. error in function symbol line numbers Error None
4

16 assembler internal error; address sync. error in function symbol line numbers Error None
5

16 assembler internal error; INCLUDE path cannot be created, check INCLUDE env. variable and Warning None
6 <-i> command-line option
16 assembler internal error; source input sync. error; bad use of include or macros Error None
7

16 assembler internal error; bad input stack Error None


8

16 assembler internal error; bad macro structure in token input Error None
9

17 assembler internal error; section raw data area exceeded Error None
0

17 assembler internal error; PC sync error while generating literal pool Error None
1

17 ROUT tag of a local label does not match the enclosed ROUT name Error None
2

17 unknown command-line argument or argument value; error file name expected Error None
3

17 unknown command-line argument or argument value; include path expected Error None
4

17 unknown command-line argument or argument value; list file name expected Error None
5

17 unknown command-line argument or argument value; obj file name expected Error None
6

17 unknown command-line argument or argument value; width value expected Error None
7

17 unknown command-line argument or argument value; length value expected Error None
8

17 unknown command-line argument or argument value; SET directive expected Error None
9

18 unknown command-line argument or argument value; <-via> file name expected Error None
0

18 wrong string constant; $ character must be doubled Error None


1

18 attribute does not pertain to a relocatable module; ignored, weak expected Error None
2

18 multiple symbol definition or incompatibility; weak alias must be external Error None
3

18 multiple symbol definition or incompatibility; procedure name must have address 0 if it is an Error None
4 area COMDAT symbol
18 multiple symbol definition or incompatibility; multiple definitions of section COMDAT symbo Error None
5 l as function name

18 multiple symbol definition or incompatibility; an assembler variable cannot be exported; exp Error None
6 ort attribute deleted

18 multiple symbol definition or incompatibility; a register relative symbol cannot be exported; Error None
7 export attribute deleted

18 multiple symbol definition or incompatibility; program counter symbol cannot be exported; e Error None
8 xport attribute deleted

18 multiple symbol definition or incompatibility; a string symbol cannot be exported; export attr Error None
9 ibute deleted

19 multiple symbol definition or incompatibility; truncation possible on a float absolute exporte Error None
0 d symbol

19 illegal symbol %s; a built-in variable cannot be used as a COMDAT symbol; ignored Error Symbol
1

19 illegal symbol %s; COMDAT symbol name expected Warning Symbol


2

19 illegal symbol %s; AREA attribute expected Error Symbol


3

19 illegal symbol %s; expected : '=' Error Symbol


4

19 illegal symbol %s; has no type Error Symbol


5

19 illegal symbol %s; wrong type Error Symbol


6

19 illegal symbol %s; absolute value expected Error Symbol


7

19 MEND directive before a proper macro definition Error None


8

19 illegal symbol %s; bad macro name Error Symbol


9

20 illegal symbol %s; < argument > expected Error Symbol


0
See Also
Other Resources
ARM Assembler Error Messages
Smart Device Development

ARM Error Messages 201-250


ARM Error Messages 201-250
The following table shows ARM error messages 201-242.

N Error Message Warnin Arguments


o. g/Error

2 illegal symbol %s; null macro formal parameter Error Symbol


0
1

2 illegal symbol %s; initialization string expected Error Symbol


0
2

2 illegal macro syntax: %s; comma or end of line expected Error Line
0
3

2 illegal macro syntax: %s; improper component of a macro definition Error Line
0
4

2 illegal symbol %s; macro name multiply defined Error Symbol


0
5

2 illegal symbol %s; unknown token Error Symbol


0
6

2 illegal symbol %s; duplicate formal parameter; ignored Warnin Symbol


0 g
7

2 wrong expression operand: %d; positive value expected Error Value in expression
0
8

2 built-in variable not implemented yet Error None


0
9

2 error while reading input file: input stack overflow, possible infinite recursion o Error None
1 n file include or macro calls
0

2 error while reading input file: seek error Error None


1
1

2 error while reading input file: line too long on input file Error None
1
2
2 error while reading input file: macro expanded line too long Error None
1
3

2 error while reading input file: input stack overflow, possible infinite recursion o Error None
1 n file include or macro calls
4

2 malformed escape constant; too many characters Error None


1
5

2 malformed constant; unknown escape sequence Error None


1
6

2 error while generating object file: write error Error None


1
7

2 assertion failed Error None


1
8

2 the selected architecture and CPU (or mode) are conflicting %s; BX instruction Error None
1 not defined for this architecture
9

2 the selected architecture and CPU (or mode) are conflicting; <Thumb Area opti Warnin None
2 on> and <command-line arch: not 4T> g
0

2 illegal flag(s); only <cpsr_f> or <spsr_f> can be used with immediate value Warnin None
2 g
1

2 operand restriction violation (undefined behavior): same source and dest reg Warnin None
2 g
2

2 operand restriction violation (undefined behavior): same base and offset reg Warnin None
2 g
3

2 mnemonic qualifier is ignored; suffix following <ldr> Warnin None


2 g
4

2 command-line option not implemented; %s assumed; %s ignored Warnin Command-line argument that is ass
2 g umed, or that is not implemented
5

2 illegal combination of section flags: section flags cannot be inferred, code and Warnin None
2 data/uninitialized, readonly/readwrite g
6
2 syntax error in expression Error None
2
7

2 assembler internal error: stack overflow in expression Error None


2
8

2 expression; %s Error Expression string


2
9

2 condition codes are not accepted for this form of blx instruction; cc ignored Warnin None
3 g
0

2 unknown floating point system register: %s; expected: FPSID, FPSCR or FPEXC Error String with floating register
3
1

2 wrong floating point register list; a compact group of registers is expected Error None
3
2

2 the maximum amount of transfer is 16 words Warnin None


3 g
3

2 improper line syntax; expected comma Error None


3
4

2 Improper syntax: s must follow condition code Error None


3
5

2 fldmdb|fstmdb require increment flag on first register Error None


3
6

2 The destination register must be even Warnin None


3 g
7

2 The use of r15 (pc) has unpredictable results Warnin None


3 g
8

2 Accumulator values greater than zero not supported Warnin None


3 g
9

2 cpu argument (%s) not supported Error Argument


4
0
2 Instruction %s not supported for -cpu %s Error None
4
1

2 -cpu option overriding -arch option Warnin None


4 g
2

2 The following usage is no longer supported : armasm [<options>] sourcefile Warnin None
4 objectfile\n g
3 Please use the ""-o"" option:
armasm [<options>] -o objectfile sourcefile\n

2 Use of undefined symbol %s in EQU expression Warnin Symbol


4 g
4

2 Literal pool entry could not be found in second pass. Check to make sure the e Error None
4 xpression and all dependent symbols are fully defined before their use.
5
See Also
Other Resources
ARM Assembler Error Messages
Smart Device Development

Renesas Family Processors


Renesas Family Processors
Renesas Technology designs and manufactures high-performance, power-efficient RISC microprocessors.
The Renesas SuperH SH-4 RISC core uses a fixed 16-bit instruction length for improved efficiency, load-store architecture with
16 32-bit general-purpose registers, and a 5-stage pipeline that executes one instruction per clock cycle.
Renesas optimizes each processor family for specific applications.
In This Section
Intrinsic Functions for Renesas Microprocessors

Provides reference information about intrinsic functions.


Renesas Compiler Options
Provides reference information about compiler and linker options available only to Renesas microprocessors.
Renesas SH-4 Calling Sequence Specification
Provides information about assemblers, register assignments, and stack layout.
Related Sections
Differences Between Desktop and Device Compilers
Provides a comparative reference for compiler options and intrinsic functions.
Smart Device Development

Intrinsic Functions for Renesas Microprocessors


Intrinsic Functions for Renesas Microprocessors
The Renesas SH-4 microprocessor includes a number of functions that you can use intrinsically for faster programs. These
functions aid mathematical computations.
Programs that use intrinsic functions do not have the overhead of function calls, but they can be larger because of the
additional code created.
To replace functions with their intrinsic (inline) forms, use the /Oi (Generate Intrinsic Functions) option or the #pragma
intrinsic.
The following table shows SH-4 microprocessor assembly language functions implemented as intrinsic functions.
SH-4 instructio Description
n
_Convolve Computes the summation of two vectors.

_Dot3dVW0 Computes the inner product of a pair of three- or four-dimensional vectors with the "w" coordinate forced to
0.

_Dot3dVW1 Computes the inner product of a pair of three- or four-dimensional vectors with the "w" coordinate forced to
1.

_Dot4dV Computes the inner product of a pair of four-dimensional vectors.

__fmac Multiplies two float values and adds to a third float value.

_LoadMatrix Loads a 4x4 matrix into the extended floating-point register bank.

__movca Moves with cache block allocation.

_Multiply4dM Multiplies a 4x4 matrix by a 4x4 matrix.

_SaveMatrix Stores the extended floating-point register bank into a 4x4 matrix.

_XDMultMatrix Multiplies a 4x4 matrix by a 4x4 matrix.

_XDXform3dV Multiplies a three-dimensional vector by a 3x3 matrix.

_XDXform4dV Multiplies a four-dimensional vector by a 4x4 matrix.

_Xform3dV Multiplies a three-dimensional vector by a 3x3 matrix.

_Xform4dV Multiplies a four-dimensional vector by a 4x4 matrix.


See Also
Other Resources
Renesas Family Processors
Smart Device Development

__fmac
__fmac
Multiplies two float values and add to a third float value.

Float __fmac(
float Arg1,
float Arg1,
float Arg1
);

Parameters
Arg1
[in] First operand of the multiplication operation.
Arg2
[in] Second operand of the multiplication operation.
Arg3
[in] Value to which the product of Arg1and Arg2 is added.
Return Values
The sum of the product of Arg1 and Arg2 with Arg3.
Remarks
The following code example shows how to use _fmac.

/***********************************************************/
#include <stdio.h>
#include <shintr.h>
void main()
{
int i;
float sum=0;
float v1[4] = {2.0, 2.0, 2.0, 2.0};
float v2[4] = {8.0, 8.0, 8.0, 8.0};
for (i = 0; i < 4; i++)
sum = __fmac(v1[i], v2[i], sum);

printf("sum = %f\n", sum);


}

This example results in the following output.

sum = 64.000000

Requirements
Routine Required header Architecture
__fmac <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
Smart Device Development

__movca
__movca
Move with cache block allocation.

void __movca(
unsigned long value,
unsigned long* addr
);

Parameters
value
[in] Specifies longword to store in memory.
addr
[in] Address in memory to be accessed.
Return Values
None.
Remarks
The following code example shows how to use _prefetch with _moveca.

#include <stdio.h>
#include <shintr.h>

#pragma intrinsic(__prefetch, __movca)


void main()
{
unsigned long addr[1]={0xffff};
unsigned long value = 0x100;
//
printf("before prefetch addr value = %x\n", addr[0]);
//
__prefetch(addr);
printf("after prefetch addr value = %x\n", addr[0]);

if (addr[0] != 0xffff)
printf("error\n");

__movca(value, addr);
printf("after movca addr value = %x\n", addr[0]);
if (addr[0] != value)
printf("error\n");
}

This example results in the following output.

before prefetch addr value = ffff


after prefetch addr value = ffff
after movca addr value = 100

Requirements
Routine Required header Architecture
__movca <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_prefetch
Smart Device Development

_Convolve
_Convolve
Computes the summation of two vectors.

Float _Convolve(
int nelement,
float* pstart,
float* pend,
float* pdata,
float* pfilter
);

Parameters
nelement

[in] Number of elements to be processed.


pstart
[in] Pointer to the beginning of data buffer.
pend
[in] Pointer to the end of data buffer.
pdata
[in] Pointer to the current data buffer.
pfilter
[in] Pointer to the filter buffer.
Return Values
The summation of two vectors.
Remarks
The pdata parameter can point to any position in the data buffer. The pfilter parameter can point to any position in the filter
buffer. The nelement parameter must not exceed pfilter+nelement buffer size.
To implement this function, use the -Qsh4 -Oi flag when compiling.
The following code example shows how to use _Convolve.

/*****************************************************************
_Convolve: summation of two vector
pstart | A0 | pfilter | X0 |
| A1 | | X1 |
| .. | | .. |
pdata | Ai | | .. |
| .. | | .. |
pend | An | | Xn |

For example:

nelement = 4;
result = (Ai * X3) + (Ai+1 * X2) + (Ai+2 * x1) + (Ai+3 * x0)
nelement = n+i;
result = (Ai * Xn) + (Ai+1 * Xn-1) + .. + (Ai-1 * X0)
*****************************************************************/

#include <stdio.h>
#include <shintr.h>
#include <stdio.h>

void main()
{
float pdata[5] = {1.0,2.0,3.0,4.0,5.0};
float filter[5] = {1.0,2.0,3.0,4.0,5.0};
float output;
float *pstart = pdata;
float *pend = pdata+4;

output = _Convolve(5, pstart, pend, pdata, filter);


printf("output = %f\n", output);

output = _Convolve(5, pstart, pend, pdata+1, filter);


printf("output = %f\n", output);

output = _Convolve(5, pstart, pend, pdata+2, filter);


printf("output = %f\n", output);
output = _Convolve(5, pstart, pend, pdata+3, filter);
printf("output = %f\n", output);

output = _Convolve(5, pstart, pend, pdata+4, filter);


printf("output = %f\n", output);

Output

output = 35.000000
output = 45.000000
output = 50.000000
output = 50.000000
output = 45.000000

Requirements
Routine Required header Architecture
_Convolve <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
Smart Device Development

_Dot3dVW0
_Dot3dVW0
Computes the inner product of a pair of three or four-dimensional vectors with the "w" coordinate forced to 0.

float _Dot3dVW0(
float* vector1,
float* vector2
);

Parameters
Vector1
[in] Pointer to a three or four-dimensional source vector.
Vector2
[in] Pointer to a three or four-dimensional destination vector.
Return Values
The scalar resulting from the inner product.
Remarks
The fourth coordinate of a source vector will always force to 0.
To implement this function, use the /Qsh4 /Oi (Generate Intrinsic Functions) flag when compiling.
The following code example shows how to use Dot3dVW0 to compute the inner products of three or four dimensional
vectors.

/***********************************************************/
#include <stdio.h>
#include <shintr.h>
void main()
{
float result;
float v1[4]={1.0,2.0,3.0,4.0};
float v2[4]={2.0,3.0,4.0,5.0};
result = _Dot3dVW0(v1,v2);
/***********************************************************/
printf("result=%f\n", result);
}

This example results in the following output.

retval=20.000000

Requirements
Routine Required header Architecture
_Dot3dVW0 <shintr.h> SH-4
See Also
Reference
_Dot4dV
_Dot3dVW1
Intrinsic Functions for Renesas Microprocessors
Smart Device Development

_Dot3dVW1
_Dot3dVW1
Computes the inner product of a pair of three or four-dimensional vectors with the "w" coordinate forced to 1.

float _Dot3dVW1(
float* vector1,
float* vector2
);

Parameters
vector1
[in] Pointer to a three or four-dimensional source vector.
vector2
[in] Pointer to a three or four-dimensional destination vector.
Return Values
The scalar resulting from the inner product.
Remarks
The fourth coordinate of the source vector will always force to 1.
To implement this function, use the -QSh4 /Oi (Generate Intrinsic Functions) flag when compiling.
The following code example shows how to compute the inner products of three or four dimensional vectors.

/***********************************************************/
#include <stdio.h>
#include <shintr.h>
void main()
{
float retval;
float v1[3] = {1.0, 2.0, 3.0};
float v2[3] = {2.0, 3.0, 4.0};
retval = _Dot3dVW1(v1, v2);
/***********************************************************/
printf("retval=%f\n", retval);
}

This example results in the following output.

retval=21.000000

Requirements
Routine Required header Architecture
_Dot3dVW1 <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Dot4dV
_Dot3dVW0
Smart Device Development

_Dot4dV
_Dot4dV
Computes the inner product of a pair of four-dimensional vectors.

float _Dot4dV(
float* vector1,
float* vector2
);

Parameters
vector1
[in] Pointer to a four-dimensional source vector.
vector2
[in] Pointer to a four-dimensional destination vector.
Return Values
The scalar resulting from the inner product.
Remarks
The following code example shows how to compute the inner product of four-dimensional vectors.

/***********************************************************/
#include <stdio.h>
#include <shintr.h>
void main()
{
float retval;
float v1[4] = {1.0, 2.0, 3.0, 4.0};
float v2[4] = {2.0, 3.0, 4.0, 5.0};
retval = _Dot4dV(v1, v2);
printf("retval=%f\n", retval);
}

This example results in the following output.

retval=40.000000

Requirements
Routine Required header Architecture
_Dot4dV <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Dot3dVW0
_Dot3dVW1
Smart Device Development

_LoadMatrix
_LoadMatrix
Loads a 4x4 matrix into the extended floating-point register bank.

float* _LoadMatrix(
float* matrix
);

Parameters
matrix
[in] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
Return Values
Pointer to the 4x4 matrix that has been loaded.
Remarks
The following code example shows how to use _LoadMatrix.

#include <stdio.h>
#include <shintr.h>

void main()
{
int i,j;
float result[4][4];
// #########################################################
float m1[4][4] = {1.0,1.0,1.0,1.0,
2.0,2.0,2.0,2.0,
3.0,3.0,3.0,3.0,
4.0,4.0,4.0,4.0};
// #########################################################
float m2[4][4] = {2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0};
// #########################################################
_LoadMatrix(m1); //Load m1 matrix into XD bank regs
_XDMultMatrix(m2); //[m1]x[m2] Saved result into XD bank regs
_SaveMatrix(result); //Load XD bank regs into result buffer
// Print out result
printf("Result of [m1]x[m2] = \n");
for (i = 0; i < 4; i++)
{
printf("| ");
for (j =0; j < 4; j++)
printf("%8.4f ", result[i][j]);
printf(" |\n");
}
}

This example results in the following output.

Result of [m1]x[m2] =
| 8.0000 8.0000 8.0000 8.0000 |
| 16.0000 16.0000 16.0000 16.0000 |
| 24.0000 24.0000 24.0000 24.0000 |
| 32.0000 32.0000 32.0000 32.0000 |

Requirements
Routine Required header Architecture
_LoadMatrix <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_SaveMatrix
Smart Device Development

_Multiply4dM
_Multiply4dM
Multiplies a 4x4 matrix by a 4x4 matrix.

float* _Multiply4dM(
float* result,
float* matrix1,
float* matrix2
);

Parameters
result
[out] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix. This matrix receives the result of the operation.
matrix1
[in] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
matrix2
[in] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
Return Values
Pointer to the 4x4 result matrix.
Remarks
The following code example shows how to use _Multiply4DM.

void main()
{
int i,j;
float result[4][4];
float m1[4][4] = {1.0,1.0,1.0,1.0,
2.0,2.0,2.0,2.0,
3.0,3.0,3.0,3.0,
4.0,4.0,4.0,4.0};
float m2[4][4] = {2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0};
Multiply4dM(result, m1, m2);
printf("Result of [m1]x[m2] = \n");
for (i = 0; i < 4; i++)
{
printf("| ");
for (j = 0; j < 4; j++)
printf("%8.4f ",result[i][j]);
printf(" |\n");
}
}

Output

Result of [m1]x[m2] =
| 8.0000 8.0000 8.0000 8.0000 |
| 16.0000 16.0000 16.0000 16.0000 |
| 24.0000 24.0000 24.0000 24.0000 |
| 32.0000 32.0000 32.0000 32.0000 |

Requirements
Routine Required header Architecture
_Multiply4dM <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_XDMultMatrix
Smart Device Development

_SaveMatrix
_SaveMatrix
Stores the extended floating-point register bank into a 4x4 matrix.

float* _SaveMatrix(
float* matrix
);

Parameters
matrix
[out] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
Return Values
Pointer to the 4x4 matrix that has been stored.
Remarks
The following code example shows how to use _SaveMatrix.

void main()
{
int i,j;
float result[4][4];
float m1[4][4] = {1.0,1.0,1.0,1.0,
2.0,2.0,2.0,2.0,
3.0,3.0,3.0,3.0,
4.0,4.0,4.0,4.0};

float m2[4][4] = {2.0,2.0,2.0,2.0,


2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0,
2.0,2.0,2.0,2.0};

_LoadMatrix(m1); //Load m1 matrix into XD bank regs


_XDMultMatrix(m2); //[m1]x[m2] —> result saved into XD bank regs
_SaveMatrix(result); //Load XD bank regs into result buffer

//
// Print out the result
//
printf("Result of [m1]x[m2] = \n");
for (i = 0; i < 4; i++)
{
printf("| ");
for (j = 0; j < 4; j++)
printf("%8.4f ",result[i][j]);
printf(" |\n");
}
_XDMultMatrix(m2); //[m1]x[m2]x[m2]->saved results into XD bank
_SaveMatrix(result); //Load XD bank regs into result buffer
//
// Print out the result
//
printf("\nResult of [m1]x[m2]x[m2] = \n");
for (i = 0; i < 4; i++)
{
printf("| ");
for (j = 0; j < 4; j++)
printf("%8.4f ",result[i][j]);
printf(" |\n");
}
}

Output

Result of [m1]x[m2] =
| 8.0000 8.0000 8.0000 8.0000 |
| 16.0000 16.0000 16.0000 16.0000 |
| 24.0000 24.0000 24.0000 24.0000 |
| 32.0000 32.0000 32.0000 32.0000 |

Result of [m1]x[m2]x[m2] =
| 64.0000 64.0000 64.0000 64.0000 |
| 128.0000 128.0000 128.0000 128.0000 |
| 192.0000 192.0000 192.0000 192.0000 |
| 256.0000 256.0000 256.0000 256.0000 |

Requirements
Routine Required header Architecture
_SaveMatrix <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_LoadMatrix
Smart Device Development

_XDMultMatrix
_XDMultMatrix
Multiplies a 4x4 matrix by a 4x4 matrix. This instruction requires one of the matrices to have been previously loaded into the
extended floating-point register bank. The matrix passed as the parameter receives the result of the operation.

void _XDMultMatrix(
float* matrix
);

Parameters
matrix
[in, out]Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
Return Values
None.
Requirements
Routine Required header Architecture
_XDMultMatrix <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Multiply4dM
_LoadMatrix
_SaveMatrix
Smart Device Development

_XDXform3dV
_XDXform3dV
Multiplies a three-dimensional vector by a 3x3 matrix. This instruction requires that the matrix has been previously loaded into
the extended floating-point register bank.

float* _XDXform3dV(
float* src,
float* dst
);

Parameters
src
[in] Pointer to a three-dimensional source vector.
dst

[out] Pointer to a three-dimensional destination vector.


Return Values
A pointer to the three-dimensional destination vector.
Remarks
The following code shows how to use _XDXform3dV.

void print_matrix(float *matrix, float *src, float *dest)


{
int row, col;

printf("Matrix:\t\t\tSrc:\tDest:\n");

for (row = 0; row < 3; row++)


{
printf("| ");
for (col = 0; col < 3; col++)
{
printf("%6.2f", *matrix++);
}
printf(" |");
printf(" |%6.2f|", *src++);
printf(" |%10.4f|\n", *dest++);
}

}
void main()
{
int i;
float dest[6];
float src[6] = {1.0,2.0,3.0,
4.0,5.0,6.0,};
float matrix[16]= {1.0, 2.0, 3.0, 4.0,
5.0, 6.0, 7.0, 8.0,
9.0, 10.0, 11.0, 12.0,
13.0, 14.0, 15.0, 16.0};
_LoadMatrix(matrix); //Load matrix into XD bank registers
for (i = 0; i < 6; i +=3)
_XDXform3dV(src+i, dest+i); //[matrix]x[src[i]] --> dest[i]

print_matrix(matrix, src, dest);


printf("\n");
print_matrix(matrix, src+3, dest+3);
}

Output

Matrix: Src: Dest:


| 1.00 2.00 3.00 | | 1.00| | 14.0000|
| 4.00 5.00 6.00 | | 2.00| | 38.0000|
| 7.00 8.00 9.00 | | 3.00| | 62.0000|
Matrix: Src: Dest:
| 1.00 2.00 3.00 | | 4.00| | 32.0000|
| 4.00 5.00 6.00 | | 5.00| | 92.0000|
| 7.00 8.00 9.00 | | 6.00| | 152.0000|

Requirements
Routine Required header Architecture
_XDXform3dV <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Xform3dV
_Xform4dV
_XDXform4dV
_LoadMatrix
_SaveMatrix
Smart Device Development

_XDXform4dV
_XDXform4dV
Multiplies a four-dimensional vector by a 4x4 matrix. This instruction requires that the matrix has been previously loaded into
the extended floating-point register bank.

float* _XDXform4dV(
float* src,
float* dst
);

Parameters
src
[in] Pointer to a three-dimensional source vector.
dst

[out] Pointer to a three-dimensional destination vector.


Return Values
Pointer to the four-dimensional destination vector.
Remarks
The following code shows how to use _XDXform4dV.

#pragma intrinsic(_XDXform4dV, _LoadMatrix)


void print_matrix(float *matrix, float *src, float *dest)
{
int row, col;
printf("Matrix:\t\t\t\tSrc:\tDest:\n");

for (row = 0; row < 4; row++)


{
printf("| ");
for (col = 0; col < 4; col++)
printf("%6.2f", *matrix++);
printf(" |");
printf(" |%6.2f|", *src++);
printf("\t|%10.4f|\n", *dest++);
}
}
void main()
{
int i;
float dest[8];

float src[8] = {1.0, 2.0 ,3.0, 4.0,


5.0, 6.0, 7.0, 8.0};
float matrix[16]={ 1.0, 2.0, 3.0, 4.0,
5.0, 6.0, 7.0, 8.0,
9.0, 10.0, 11.0, 12.0,
13.0, 14.0, 15.0, 16.0};

LoadMatrix(matrix); //Load matrix into XD bank registers


for (i = 0; i < 8; i +=4)
XDXform4dV(src+i, dest+i); //[matrix]x[src[i]] --> dest[i]
print_matrix(matrix, src, dest);
printf("\n");
print_matrix(matrix, src+4, dest+4);
}

Output

Matrix: Src: Dest:


| 1.00 2.00 3.00 4.00 | |
1.00 | | 30.0000|
| 5.00 6.00 7.00 8.00 | |
2.00 | | 70.0000|
| 9.00 10.00 11.00 12.00 | |
3.00 | | 110.0000|
| 13.00 14.00 15.00 16.00 | |
4.00 | | 150.0000|
Matrix: Src: Dest:
| 1.00 2.00 3.00 4.00 | | 5.00| | 70.0000|
| 5.00 6.00 7.00 8.00 | | 6.00| | 174.0000|
| 9.00 10.00 11.00 12.00 | | 7.00| | 278.0000|
| 13.00 14.00 15.00 16.00 | | 8.00| | 382.0000|

Requirements
Routine Required header Architecture
_XDXform4dV <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Xform3dV
_Xform4dV
_LoadMatrix
_SaveMatrix
Smart Device Development

_Xform3dV
_Xform3dV
Multiplies a three-dimensional vector by a 3x3 matrix. This intrinsic will load a constant zero into Bank1 floating-point registers
(fr12, fr13, fr14, fr15) and Bank0 floating-point register (fr3).

float* _Xform3dV(
float* dst,
float* src,
float* matrix
);

Parameters
dst

[out] Pointer to a three-dimensional destination vector.


src
[in] Pointer to a three-dimensional source vector.
matrix
[in] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 3x3
matrix.
Return Values
Pointer to the three-dimensional destination vector.
Remarks
The following code shows how to use _Xform3dV.

void print_matrix(float *matrix, float *src, float *dest)


{
int row, col;

printf("Matrix:\t\t\tSrc:\tDest:\n");
for (row = 0; row < 3; row++)
{
printf("| ");
for (col = 0; col < 3; col++)
{
printf("%6.2f", *matrix++);
}
printf(" |");
printf(" |%6.2f|", *src++);
printf("\t|%10.4f|\n", *dest++);
}
}

void main()
{
int i;
float dest[3];
float src[3] = {1.0, 2.0, 3.0}
float matrix[9]={1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0};
_Xform3dV(dest, src, matrix); // [matrix]x[src[i]] Ã dest[i]
print_matrix(matrix, src, dest);
}
Output
Matrix: Src: Dest:
| 1.00 2.00 3.00 | | 1.00| | 14.0000|
| 4.00 5.00 6.00 | | 2.00| | 32.0000|
| 7.00 8.00 9.00 | | 3.00| | 50.0000|

Requirements
Routine Required header Architecture
_Xform3dV <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Xform4dV
_XDXform4dV
_XDXform3dV
_LoadMatrix
_SaveMatrix
Smart Device Development

_Xform4dV
_Xform4dV
Multiplies a four-dimensional vector by a 4x4 matrix.

float* _Xform4dV(
float* dst,
float* src,
float* matrix
);

Parameters
dst
[out] Pointer to a four-dimensional destination vector.
src
[in] Pointer to a four-dimensional source vector.
matrix
[in] Pointer to an array of float values arranged such that the indices of the array are the [row][column] values of the 4x4
matrix.
Return Values
Pointer to the four-dimensional destination vector.
Remarks
The following code shows how to use _Xform4dV.

void print_matrix(float *matrix, float *src, float *dest)


{
int row, col;

printf("Matrix:\t\t\t\tSrc:\tDest:\n");

for (row = 0; row < 4; row++)


{
printf("| ");
for (col = 0; col < 4; col++)
{
printf("%6.2f", *matrix++);
}
printf(" |");
printf(" |%6.2f|", *src++);
printf("\t|%10.4f|\n", *dest++);
}
}

void main()
{
int i;
float dest[4];
float src[4] = {1.0,2.0,3.0,4.0};

float matrix[16]={ 1.0, 2.0, 3.0, 4.0,


5.0, 6.0, 7.0, 8.0,
9.0, 10.0, 11.0, 12.0,
13.0, 14.0, 15.0, 16.0};
_Xform4dV(dest, src, matrix); //[matrix]x[src[i]] --> dest[i]

print_matrix(matrix, src, dest);


}
Output
Matrix: Src: Dest:
| 1.00 2.00 3.00 4.00 | | 1.00| | 30.0000|
| 5.00 6.00 7.00 8.00 | | 2.00| | 70.0000|
| 9.00 10.00 11.00 12.00 | | 3.00| | 110.0000|
| 13.00 14.00 15.00 16.00 | | 4.00| | 150.0000|

Requirements
Routine Required header Architecture
_Xform4dV <shintr.h> SH-4
See Also
Reference
Intrinsic Functions for Renesas Microprocessors
_Xform3dV
_XDXform4dV
_XDXform3dV
_LoadMatrix
_SaveMatrix
Smart Device Development

Renesas Compiler Options


Renesas Compiler Options
The Renesas compiler supports the following command-line options:
-QSfast, -QSfastd - Provide Backward Compatibility
-Qsh4
-QSimplicit-import- Disable Importing of Helpers
See Also
Concepts
Unique Build Options
Smart Device Development

-QSfast, -QSfastd - Provide Backward Compatibility


-QSfast, -QSfastd - Provide Backward Compatibility
These options, -QSfast and -QSfastd provide backward compatibility. -QSfastd is the default.
The device compilers support full IEEE compliant hardware operations including the use of denormal operands. This allows the
compiler to default to use of the Renesas SuperH SH-4 hardware instructions for both single and double precision floating-
point operations.
The -QSfast option causes the compiler to call CRT emulation routines for all floating-point operations.
The -QSfast option allows the compiler to use single precision SH-4 floating-point instructions. It will also generate a warning
if the compiler finds a double floating point constant.
Do not use double constants when performance is a consideration, because double constants can unnecessarily promote an
operation-type from single to double precision.
Note that floating-point constants default to type double. You may specify single precision floating point constants with a
floating suffix f or F such as 3.14159f.
The default -QSfastd option allows the compiler to use single and double precision SH-4 floating-point instructions.
The compiler does not generate warnings for double constants when you specify -QSfastd. The -QSfastd command line
option may cause the compiler to produce slightly larger code.
See Also
Reference
Renesas Compiler Options
Smart Device Development

-QSh4
-QSh4
This option specifies compilation for the Renesas SH-4 microprocessor.
See Also
Reference
Renesas Compiler Options
Smart Device Development

-QSimplicit-import- Disable Importing of Helpers


-QSimplicit-import- Disable Importing of Helpers
This option forces the compiler to use statically linked helper functions. Compiler helper functions are typically located in a
DLL.
To reduce the thunk overhead when calling these functions, the compiler uses the dllimport calling mechanism. If OS or driver
code is linked statically with the helper functions, the -QSimplicit-import- flag is used to force the compiler to use typical
calling mechanisms.
See Also
Reference
Renesas Compiler Options
Smart Device Development

Renesas SH-4 Calling Sequence Specification


Renesas SH-4 Calling Sequence Specification
The Renesas SuperH SH-4 Calling Sequence Specification provides direction for the development of compilers and assembly
language programs for the SH-4 microprocessor.
In addition, the standard enables the development of tools, debuggers, and operating system utilities that perform automated
walking of the call stack.
In This Section
Renesas SH-4 Registers
Describes register assignments and parameter passing conventions.
Renesas SH-4 Stack Frame Layout
Describes the stack frame layout.
Renesas SH-4 Prolog and Epilog
Describes the code sequence specifications for setting up a stack frame for unwinding.
Related Sections
Renesas Family Processors
Provides an overview of compiler options, intrinsic functions, and call specifications for Renesas microprocessors supported
in this release of Visual Studio.
Smart Device Development

Renesas SH-4 Registers


Renesas SH-4 Registers
The Renesas SuperH SH-4 has 16 general-purpose registers. The following table shows the roles assigned to these registers.
Regis Description
ter
R0 Serves as a temporary register when expanding assembly language pseudo-instructions, and holds function return valu
es.
In addition, R0 serves as an implicit source or destination in byte and 16-bit operations.
Not preserved.

R1-R Serve as temporary registers


3
Not preserved

R4-R Hold the first four words of integer and non-scalar incoming arguments. The argument build area provides space into
7 which R4 through R7 holding arguments may spill.
Not preserved.

R8-R Serve as permanent registers


13
Preserved

R14 Serves as the default frame pointer. Any other permanent register may serve as the frame pointer, and leaf routines ma
y use a temporary register as the frame pointer.
Preserved.

R15 Serves as the stack pointer or as a permanent register


Preserved.

The SH-4 has two banks of 16 floating-point registers designated Bank0 and Bank1. This specification does not define the use
of Bank1. This calling convention assigns the following roles to the SH-4 Bank0 floating-point registers.
Double-Precis Single-Precisi Description
ion Register on Register
DR0 FR0 Hold function return values. DR0 is another name for the single-precision registers FR0 and F
R1 as a pair.
FR1

DR2 FR2-FR3 Serve as temporary registers. DR2 is another name for FR2 and FR3 as a pair.
Not preserved

DR4-DR10 FR4-FR11 Hold single- or double-precision floating-point arguments. The argument build area also provi
des space into which floating-point registers holding arguments may spill.

DR12-DR14 FR12-FR15 Serve as permanent registers.


Preserved

The floating-point status control affects the behavior of some floating-point instructions. For information about the use of the
PR, SZ, and FR bits within prologs and epilogs, see Renesas SH-4 Prolog and Epilog.
See Also
Concepts
Renesas SH-4 Stack Frame Layout
Other Resources
Renesas SH-4 Prolog and Epilog
Smart Device Development

Renesas SH-4 Stack Frame Layout


Renesas SH-4 Stack Frame Layout
The Renesas SuperH SH-4 stack frame layout uses four designated areas to hold register areas used by functions and space for
variables.
The Register Save Area (RSA) holds the preserved values of any permanent registers used by the function. It also
contains the function's return address.
The Locals and Temporaries area represents the stack space allocated for local variables and compiler-generated
temporaries.
An alloca() locals area is dynamically allocated during function execution by the use of the alloca() intrinsic function.
Compiler-generated code may also dynamically allocate space to manage the construction of outgoing arguments.
The Outgoing Arguments area must be large enough to hold all the arguments passed when calling another function,
including all arguments passed in registers. This area may be dynamically allocated or extended prior to a call if the rules
for alloca() are observed.

SH-4 Frame and Stack Pointers


The following list gives more information about stack and frame pointers:
The stack pointer and frame pointer addresses are aligned on 4-byte boundaries.
If a routine has alloca() locals, or dynamically allocates stack frame space for any other reason, a separate frame pointer
register accesses incoming arguments and locals. A leaf routine may use any free integer register as the frame pointer. A
non-leaf routine must use a permanent register.
By convention, a routine that establishes a separate frame pointer should use R14. However, a routine may establish
another frame pointer to more efficiently access data in large stack frames. If a routine establishes no frame pointer, R15
must remain unchanged between the end of prolog and the beginning of the epilog.
See Also
Concepts
Renesas SH-4 Registers
Other Resources
Renesas SH-4 Prolog and Epilog
Smart Device Development

Renesas SH-4 Prolog and Epilog


Renesas SH-4 Prolog and Epilog
Renesas SuperH SH-4 prolog and epilog code segments are required to implement Structured Exception Handling (SEH) on
Renesas microprocessors. For more information, see SEH in RISC Environments.
The prolog contains the code that sets up the stack frame for a routine. The epilog contains the code that removes the routine's
frame and then returns to the calling function.
In This Section
SH-4 Prolog
Describes the requirements for an SH-4 prolog sequence.
SH-4 Epilog
Describes the requirements for an SH-4 epilog sequence.
SH-4 Prolog and Epilog Examples
Provides examples of paired prolog and epilog sequences.
Smart Device Development

SH-4 Prolog
SH-4 Prolog
The SH-4 prolog contains four parts that are immediately contiguous with no intervening instructions. The following list shows
the required parts.
1. A sequence of zero or more instructions that save the incoming argument values from R4 - R7 and FR4 - FR11 to the
argument home locations.
This sequence typically uses the fmov instruction with R15 as the base address register. This sequence will not change
the stack pointer, R15.
In addition, floating-point argument registers can be stored onto the stack using the fmov instruction with the register-
indirect and register-indirect-pre-decrement addressing modes.
A sequence of one or more such fmov instructions may be preceded by a two-instruction address register setup
sequence composed of a constant move to a general register, followed by an add of the sp to the register. For example:
mov #36, r0
add sp, r0
fmov fr5, @r0
fmov fr4, @-r0

2. A sequence of zero or more instructions that push all permanent registers to be saved and the return address (PR), if it is
to be saved, onto the stack using the pre-decrement indirect register addressing mode with R15 as the address register.
If a permanent register such as R14 is to be used as the frame pointer, it is pushed first.
If the PR is to be saved, it is pushed last.
The prolog uses mov.l instructions to save registers other than the return address, and the sts.l instruction to save the
return address.
The prolog also uses the fmov.s instruction to save floating-point registers, and may invoke double-precision and move-
extension fmov instructions by first setting the SZ bit in the FPSCR.
3. A sequence of one or more instructions that set up the frame pointer, if one is to be established.
To set up the frame pointer, the step 3 sequence first copies the contents of R15 to the frame pointer register, then adds
or subtracts the amount of offset to the frame pointer address from the frame pointer register.
If the frame pointer address is less than the current value in R15, the prolog subtracts the offset to the frame pointer
address from R15, and copies R15 to the frame pointer register. If this method is used, the routine must later take the
size of the decrement to R15 into account.
If the routine is not a leaf routine, the function must use a permanent register, typically R14, as the frame pointer.
4. A sequence of zero or more instructions that allocate the remaining stack frame space for local variables, compiler-
generated temporaries, and the argument-build area by subtracting a 4-byte aligned offset from R15.
The Virtual Unwinder considers the last instruction in this sequence the last instruction of the prolog.
If necessary, the temporary register R1 holds an offset too large to be represented in the immediate field of an add instruction.
See Also
Concepts
SH-4 Epilog
SH-4 Prolog and Epilog Examples
Other Resources
Renesas SH-4 Prolog and Epilog
Smart Device Development

SH-4 Epilog
SH-4 Epilog
The SH-4 epilog is a contiguous sequence of instructions that restores the saved permanent registers, resets the stack pointer
to its value on function entry, and returns to the function's calling function.
In addition, the Virtual Unwinder requires the epilog to have the following parts, except where noted:
1. A single add instruction that increments the frame pointer. This instruction must immediately precede the sequence of
instructions defined for part 2. (Optional)
2. A sequence of instructions that modify R15 by referencing it in the destination operand of the instruction or in a post-
increment memory address operand of the instruction. This sequence immediately precedes the rts instruction of part 3.
All instructions in this sequence must be lds, mov, fmov, fschg, or add instructions.
This item is optional. It does not appear in functions that have no RSA area to restore.
3. The rts instruction and its delay slot instruction. The instruction in the delay slot of the rts is considered part of the epilog
but is not required to conform to the rules listed for item 2.
When unwinding out of a function, the Virtual Unwinder must determine if the currently executing instruction is in the prolog
or epilog. If the current point of control is in the prolog or in the epilog, the Virtual Unwinder must take special measures to
unwind out of the function.
The following list shows three conditions that the Virtual Unwinder must maintain:
If the function establishes a frame pointer, the function may not modify the frame pointer value during the interval
between the completion of the last prolog instruction and the beginning of the first instruction of the epilog.
If the function does not establish a frame pointer, the function must not modify value in R15 during the interval between
the completion of the last prolog instruction and the beginning of the first instruction of the epilog.
The address contained in the stack pointer, which is always R15, must never be greater than the lowest address of any
unrestored register value in the Register Save Area.
The SZ, PR, and FR bits of the FPSCR register must always be set to zero on entering and exiting the prolog and epilog.
The PR and FR bits must not be modified within the prolog or epilog. This condition enables the Virtual Unwinder to
correctly reverse-execute floating-point instructions.
See Also
Concepts
SH-4 Prolog
SH-4 Prolog and Epilog Examples
Other Resources
Renesas SH-4 Prolog and Epilog
Smart Device Development

SH-4 Prolog and Epilog Examples


SH-4 Prolog and Epilog Examples
The following code examples show how to use prolog and epilog to perform certain tasks.
Allocate a stack frame to save R14, R8, and PR
This example allocates a stack frame to save R14, R8, and PR, and to allow alloca() calls. It also allocates a 4-word
argument build area. Local variables and temporaries do not need stack space.
// Prolog

NESTED_ENTRY Function

mov.l R14, @-R15 // Save old frame pointer.


mov.l R8, @-R15 // Save a permanent register.
sts.l PR, @-R15 // Save return address.
mov R15, R14 // Set up new frame pointer.
add #12, R14
add #-16, R15 // Allocate argument save area

PROLOG_END

// Routine body

// Epilog

add #-12, R14 // Find base of RSA.


mov R14, R15
lds.l @R15+, PR // Restore return address.
mov.l @R15+, R8 // Restore R8.
rts // Return.
mov.l @R15+, R14 // Restore R14.

ENTRY_END Function

Allocate a stack frame for a leaf routine


This example allocates a stack frame for a leaf routine that requires 40 bytes for local variables and temporaries. It uses
permanent registers R8, R9, and R10. This routine has no _alloca locals, so no frame pointer is required.
// Prolog

NESTED_ENTRY Function

mov.l R8, @-R15


mov.l R9, @-R15
mov.l R10, @-R15
add #-40, R15

PROLOG_END

// Routine body

add #40, R15


mov.l @R15+, R10
mov.l @R15+, R9
rts
mov.l @R15+, R8

ENTRY_END Function

See Also
Reference
SH-4 Assembler Macros
Other Resources
Renesas SH-4 Prolog and Epilog
Smart Device Development

SH-4 Assembler Macros


SH-4 Assembler Macros
SH-4 assembler-level macros are reuired to implement prolog and epilog code sequences.
The following table shows the macros defined for SH-4 microprocessors.
Macro name Description
ALTERNATE_ENTRY (SH-4) Declares an alternate entry to a routine.

END_REGION (SH-4) Marks the end of a contiguous range of text or data.

ENTRY_END (SH-4) Ends the routine that was specified by a prior NESTED_ENTRY.

EXCEPTION_HANDLER (SH-4) Associates a named exception handler with the subsequent NESTED_ENTRY.

EXCEPTION_HANDLER_DATA (S Associates a named exception handler and the handler data with the subsequent NESTED_EN
H-4) TRY.

LEAF_ENTRY (SH-4) Declares the beginning of a routine that does not require any prolog code.

NESTED_ENTRY (SH-4) Declares the beginning of a routine that either has an existing stack frame or creates a new st
ack frame.

PROLOG_END (SH-4) Marks the end of the prolog area.

START_REGION (SH-4) Marks the beginning of a contiguous range of text or data.


See Also
Other Resources
Renesas SH-4 Calling Sequence Specification
Smart Device Development

ALTERNATE_ENTRY (SH-4)
ALTERNATE_ENTRY (SH-4)
This macro declares an alternate entry to a routine of type NESTED_ENTRY (SH-4) or LEAF_ENTRY (SH-4).

ALTERNATE_ENTRY Name[,
[Section=]SectionName]

Parameters
Name
Name is the entry point and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; see Remarks.
Return Values
None.
Remarks
The ALTERNATE_ENTRY macro does not use the SectionName parameter. The parameter is accepted and ignored for
consistency with NESTED_ENTRY and LEAF_ENTRY.
If used, an ALTERNATE_ENTRY call must appear in the body of a routine.
See Also
Reference
NESTED_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
Smart Device Development

END_REGION (SH-4)
END_REGION (SH-4)
This macro marks the end of a contiguous range of text or data.

END_REGION NameEnd

Parameters
NameEnd
NameEnd labels the end of the range.
Return Values
None.
Remarks
NameEnd is in the global name space.
See Also
Reference
START_REGION (SH-4)
Smart Device Development

ENTRY_END (SH-4)
ENTRY_END (SH-4)
This macro ends the current routine specified by NESTED_ENTRY (SH-4) or LEAF_ENTRY (SH-4).

ENTRY_END [Name]

Parameters
Name
Name is the entry point and is in the global name space.See Remarks.
Return Values
None.
Remarks
Name should be the same name used in the NESTED_ENTRY or LEAF_ENTRY macros.
The ENTRY_END (SH-4) macro currently ignores Name.
See Also
Reference
NESTED_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
Smart Device Development

EXCEPTION_HANDLER (SH-4)
EXCEPTION_HANDLER (SH-4)
This macro associates an exception handler Handler with a subsequent NESTED_ENTRY (SH-4) or LEAF_ENTRY (SH-4) routine.

EXCEPTION_HANDLER Handler

Parameters
Handler
Name of exception handler.
Return Values
None.
Remarks
This association is in effect until the compiler encounters a matching ENTRY_END (SH-4) macro.
See Also
Reference
NESTED_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
ENTRY_END (SH-4)
Smart Device Development

EXCEPTION_HANDLER_DATA (SH-4)
EXCEPTION_HANDLER_DATA (SH-4)
This macro associates an exception handler Handler and the HandlerData with a subsequent NESTED_ENTRY (SH-4) or
LEAF_ENTRY (SH-4) routine.

EXCEPTION_HANDLER_DATA Handler,
HandlerData

Parameters
Handler
Name of exception handler.
HandlerData

String associated with exception handler.


Return Values
None.
Remarks
This association is in effect until compiler encounters a matching ENTRY_END (SH-4) macro.
See Also
Reference
NESTED_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
ENTRY_END (SH-4)
EXCEPTION_HANDLER (SH-4)
Smart Device Development

LEAF_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
This macro declares the beginning of a routine that does not require any prolog code.

LEAF_ENTRY Name[,
[Section=]SectionName]

Parameters
Name
Name is the routine name and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; it is optional and defaults to .text.
Return Values
None.
Remarks
A LEAF_ENTRY must have an associated ENTRY_END (SH-4).
See Also
Reference
ENTRY_END (SH-4)
PROLOG_END (SH-4)
Smart Device Development

NESTED_ENTRY (SH-4)
NESTED_ENTRY (SH-4)
This macro declares the beginning of a routine that either has an existing frame or creates a stack frame.

NESTED_ENTRY Name[,
[Section=]SectionName]

Parameters
Name
Name is the routine name and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; it is optional and defaults to text.
Return Values
None.
Remarks
A NESTED_ENTRY must have an associated PROLOG_END (SH-4) and ENTRY_END (SH-4).
See Also
Reference
ENTRY_END (SH-4)
PROLOG_END (SH-4)
Smart Device Development

PROLOG_END (SH-4)
PROLOG_END (SH-4)
This macro marks the end of the prolog area.

PROLOG_END

Parameters
None.
Return Values
None.
Remarks
This macro must appear following a NESTED_ENTRY (SH-4) or LEAF_ENTRY (SH-4) macro.
It appears after the prolog area and before the matching ENTRY_END (SH-4) macro.
See Also
Reference
NESTED_ENTRY (SH-4)
LEAF_ENTRY (SH-4)
ENTRY_END (SH-4)
Smart Device Development

START_REGION (SH-4)
START_REGION (SH-4)
This macro marks the beginning of a contiguous range of text or data.

START_REGION NameBegin

Parameters
NameBegin
NameBegin labels the beginning of the range. NameBegin is in the global name space.
Return Values
None.
See Also
Reference
END_REGION (SH-4)
Smart Device Development

Renesas SH-4 Series Assembler


Renesas SH-4 Series Assembler
The SH-4 Series Assembler (SHASM) converts source programs written in assembly language into a format that can be
handled by SH microprocessors, outputting the result as an object module and as an assembler listing. SHASM generates
output in Microsoft Common Object File Format (COFF).
SHASM contains numerous enhancements designed to enhance the programming environment and to address compatibility
issues.
Although SHASM closely resembles the Renesas native assembler, it is not identical. For example, SHASM generates error and
warning messages that contain not only an error number but also a descriptive message.
In This Section
SH-4 Assembler Command-Line Options
Describes the command-line options available to SHASM
SH-4 Assembler Directives
Describes assembler directives
SH-4 Assembler Error Messages
Lists the error messages displayed by the SH-4 assembler.
Related Sections
Renesas SH-4 Calling Sequence Specification
Provides an overview and links to information about register assignments and stack layout
Smart Device Development

SH-4 Assembler Command-Line Options


SH-4 Assembler Command-Line Options
To start the SH-4 assembler, enter a command line with the following format when the host computer operating system is in
the input wait state.

shasm <input source file> [,<input source file>...][command line options>...]

When you specify multiple source files on the command line, the assembler creates a unit of assembly processing by
concatenating the specified files in the specified order. Because of this, the .END directive must appear only in the last file.
Command line options can begin with either a - (hyphen) or a / (slash). File names can be specified with forward or backward
slashes.
If the assembler has the option of interpreting an argument as either a command line option or a file name, the argument will
be interpreted as a command line option. For example, if a file called /source.src is assembled by writing shasm /source, the
assembler interprets /source as a switch, and issues a message that there are no input files.
Command line options provide additional specifications for the assembly processing. The following table shows the command
line options for the SH-4 assembler.
Command line opt Description
ion
-OBJECT Specifies output of an object module. Default value.

-NOOBJECT Suppresses output of an object module.

-DEBUG Specifies output of debug information.

-NODEBUG Suppresses output of debug information.

-LIST Specifies output of an assembler listing. Default value.

-NOLIST Suppresses output of an assembler listing.

-SHOW Specifies output of the preprocessor function source program.

-NOSHOW Suppresses output of specified preprocessor function source statements and object code display lines in t
he source program listing.

-LINES Sets the number of lines in the assembler listing.

-COLUMNS Sets the number of columns in the assembler listing.

-FoOBJPATH Sets the path to which the object should be written. A synonym for the -o=OBJPATH option. Provided for
compatibility with Microsoft-based tools.

-wide[_listing] Shows up to eight bytes of machine code or data per line in the assemble listing. Default is four bytes per
line.

-nowide[_listing] Shows up to four bytes of machine code or data per line in the assemble listing. This is the default behavi
or.

-tab[_expand][=<nu Expands tab characters in the assemble listing. The number, if specified, is the spacing of tab stops. Defaul
mber>] t is eight.
-Notab[_expand] Writes tab characters into the assemble listing unchanged. This is the default behavior.

-maxerr[ors]=<num Aborts the assembly after <number> errors have been reported. Default is 100.
ber>

-Qsh<version>[r<r Selects SH microprocessor version and revision that control the setting of the _M_SH and _M_SH_REV pr
evision>] edefined symbols. Default is version SH-4.

-nologo Instructs not to print the logo banner when it runs.

-help -usage Output a detailed command line usage message and exit immediately.

-D<name>[=<num Predefines an equate; for example, -DTERM is equivalent to TERM.


ber>]

-CPU=SH<version> Selects target CPU for the source program being assembled. Valid options are:
SH1
SH2
SH4

The assembler listing is a listing to which the results of the assembly processing are output.
Note that when compiling an assembly source file that ends in .s, in contrast to .asm or .src, then the output object file
concatenates .obj to the end of the file name. For example, a file named test.s is assembled to test.s.obj.
Return Codes
The assembler delivers a return code that reports whether or not the assembly processing terminated normally. The following
table shows the return values that indicate the activity at termination.
Activity Return value
Normal termination 0

Warnings occurred 0

Errors occurred 2

Fatal error occurred 4


See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Directives


SH-4 Assembler Directives
The SH-4 assembler (SHASM) includes numerous assembler directives that the assembler interprets and executes.
In This Section
SH-4 Assembler Macro Directives
SH-4 Assembler Section and Location Directives
SH-4 Assembler Symbol Handling Directives
SH-4 Assembler Data and Data Area Directives
SH-4 Assembler Function-Definition Directives
SH-4 Assembler Debug Information Directives
SH-4 Assembler Listing Directives
SH-4 Assembler Miscellaneous Directives
SH-4 Assembler Conditional Assembly Directives
Smart Device Development

SH-4 Assembler Macro Directives


SH-4 Assembler Macro Directives
The assembler provides the following macro function directives.
Directi Syntax Description
ve
.MACR .MACRO <macro name>[ <formal parameter>[=<default>] [,<forma Defines a macro.
O l parameter>...]]

.ENDM ENDM Indicates the end of a macro d


efinition.

.EXITM .EXITM Terminates macro expansion.

See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Section and Location Directives


SH-4 Assembler Section and Location Directives
The following table lists shows SH-4 assembler directives for Section assignment and the location counters.
Direc Syntax Description
tive
.SECTI .SECTION <section name> [,<section type>[ Declares a section.
ON ,<section attributes>...]]

.ORG .ORG <location-counter-value> Sets the value of the location counter.


location counter value must be an absolute value with no
forward reference symbols.

.ALIG .ALIGN <boundary alignment value> Adjusts the value of the location counter to a multiple of
N boundary alignment value.
boundary alignment value must be an absolute value wit
h no forward reference symbols.

The assembler also provides a default section for the situations in which no section has been declared.
The following list shows the kinds of statements and instructions for which SHASM provides a default section.
Executable instructions
Data reservation assembler directives
.ALIGN assembler directive
.ORG assembler directive
Reference to the location counter
Statements consisting of only the label field
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Symbol Handling Directives


SH-4 Assembler Symbol Handling Directives
The following table shows SH-4 assembler directives for symbol handling.
Dir Syntax Description
ecti
ve
.EQ <symbol>[:] .EQU <symbol val Sets a symbol value. Symbols defined with the .EQU directive cannot be rede
U ue> fined.

.AS <symbol>[:] .ASSIGN <symbol Sets a symbol value that can be redefined.
SIG value>
N

.RE <symbol>[:] .REG <register Defines the alias of a register name.


G name><symbol>[:] .REG (<regi
ster name>) The alias of a register name defined with .REG cannot be redefined.

.EXP .EXPORT <symbol>[,<symbol>.. Declares export symbols.


ORT .]
This declaration allows symbols defined in the current file to be referenced i
n other files.

.IMP .IMPORT <symbol>[,<symbol>.. Declares import symbols.


ORT .]
This declaration allows symbols defined in other files to be referenced in the
current file.

.GL .GLOBAL <symbol>[,<symbol>.. Declares export and import symbols.


OB .]
AL This declaration allows symbols defined in the current file to be referenced i
n other files and allows symbols defined in other files to be referenced in the
current file.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Data and Data Area Directives


SH-4 Assembler Data and Data Area Directives
The following table shows SH-4 assembler directives for data and data area reservation.
Dire Syntax Description
ctive
.CO .COMMON <symbol name>[,<size>] Reserves data area with default initialization to zeros.
MM
ON

.DAT [<symbol>[:]] .DATA[.<operation size>] <i Reserves integer data.


A nteger data>[,<integer data>...]
The following list shows the data size of symbol.
B - Byte
W - Word, 2 bytes
L - Longword, 4 bytes, default

.DAT [<symbol>[:]] .DATAB[.<operation size>]<b Reserves integer data blocks.


AB lock count>,<integer data>
The block count specification must be an absolute value wi
th no forward reference symbols.

.FDA [<symbol>[:]] .FDATA[.<operation size>] < Reserves floating-point data.


TA floating point data>[,<floating point dat
a>...]

.FDA [<symbol>[:]] .FDATAB[.<operation size>] Reserves floating-point data blocks.


TAB <block count>,<floating point data>

.FRE [<symbol>[:]] .FRES[.<operation size>] <a Reserves floating-point area.


S rea count>
The area count specification must be an absolute value wit
h no forward reference symbols.

.SDA [<symbol>[:]] .SDATA <character string>[, Reserves character string data.


TA <character string>...]

.SDA [<symbol>[:]] .SDATAB <block count>,<char Reserves character string data blocks.
TAB acter string>

.SDA [<symbol>[:]] .SDATAC <character string>[ Reserves character string data with length.
TAC ,<character string>...]

.SDA [<symbol>[:]] .SDATACB <block count>,<cha Reserves specified number of character string data blocks
TACB racter string> with length.
A character string with length is a character string with an
inserted leading byte that indicates the length of the string
.
.SDA [<symbol>[:]] .SDATAZ <character string>[ Reserves character string data with zero terminator.
TAZ ,<character string>...]

.SDA [<symbol>[:]] .SDATAZB <block count>,<cha Reserves specified number of character string data blocks
TAZB racter string> with zero terminator.

.RES [<symbol>[:]] .RES[.<operation size>] <ar Reserves data area.


ea count>
The area count specification must be an absolute value wit
h no forward reference symbols.

.SRE [<symbol>[:]] .SRES <character string are Reserves character string data area.
S a size>[,<character string area size>...]
The character string area size specification must be an abs
olute value with no forward reference symbols.

.SRE [<symbol>[:]] .SRESC <character string ar Reserves character string data area with length.
SC ea size>[,<character string area size>...
] A character string with length is a character string with an
inserted leading byte that indicates the length of the string
.

.SRE [<symbol>[:]] .SRESZ <character string ar Reserves character string data area with zero terminator.
SZ ea size>[,<character string area size>...
]

String constants in the .SDATA family of directives are allowed to be one or more of the following in any combination:

"quoted string"
<control char expression>

The assembler requires that parentheses be put around string constants if they are to be used as part of more complicated
expressions such as string comparisons in .SDATA and related directives.
In all other contexts, string constants can only be double-quoted strings, and can be used without parentheses.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Function-Definition Directives


SH-4 Assembler Function-Definition Directives
To support the requirements of C++ and structured exception handling as well as provision of stack traces in the debugger,
object files must contain information regarding where functions begin and end and what part of each function is devoted to
setting up the function's stack frame.
The following table shows SH assembler directives that define functions.
Direc Syntax Description
tive
.ENTR <symbol>[:] .ENTRY Marks beginning of a function.
Y

.BIGE <symbol>[:] .BIGENTRY Marks beginning of a function.


NTRY

.ENDF .ENDF Marks end of a function.

.PROL .PROLOG Marks end of a function's prolog code.


OG
The function prolog is the code at the beginning of the function that sets up the f
unction stack frame.
The .PROLOG directive should appear between the last line of prolog code and t
he first line of non-prolog code for the function.

.PDAT .PDATA <handler address Specifies language-specific exception-handling information for current function.
A >[,<handler data>]
The .PDATA directive must appear before the .ENTRY or .BIGENTRY section to w
hich it applies.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Debug Information Directives


SH-4 Assembler Debug Information Directives
The following table shows SH-4 assembler directives that control output of symbols and object modules.
Directiv Syntax Description
e
.OUTPUT .OUTPUT <output specifier>[,<output specifi Controls object module and debug information out
er>] put.

.DEBUG .DEBUG <output specifier> Controls the output of symbolic debug information.

Specifications concerning debug information output are only valid when an object module is output.
The following table shows possible values for output specifier.
Output Specifier Description
OBJ (default) An object module is output.

NOOBJ No object module is output.

DBG Debug information is output in the object module.

NODBG (default) No debug information is output in the object module.

The .DEBUG directive specification is valid only when both an object module and debug information are output.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Listing Directives


SH-4 Assembler Listing Directives
The following table shows SH-4 assembler directives that control listings.

Direc Syntax Description


tive

.PRI .PRINT <output specifier>[,<output specifier>...] Controls assembler-listing output.


NT
For more information, see SH-4 Asse
mbler PRINT Directive Specifiers.

.LIST .LIST <output specifier>[,<output specifier>...]Output specifier:{ ON|OFF|COND| Controls the output of the source prog
NOCOND|DEF|NODEF| CALL|NOCALL|EXP| NOEXP|CODE|NOCODE} ram listing.
For more information, see SH-4 Asse
mbler LIST Directive Specifiers.

.FOR .FORM <size specifier>[,<size specifier>...] Sets the number of lines and columns
M in the assembler listing.
For more information, see SH-4 Asse
mbler FORM Directive Specifiers.

.HEA .HEADING [<expression>[,<expression>...]] Sets the header for the source progra
DIN m listing.
G

.PAG .PAGE Inserts a new page in the source progr


E am listing.

.SPA .SPACE[ <line count>] Outputs blank lines to the source prog
CE ram listing.

The assembler gives priority to command line option specifications concerning assembler-listing output.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler PRINT Directive Specifiers


SH-4 Assembler PRINT Directive Specifiers
The following table shows possible values for the PRINT directive output specifier.
Output Specifier Assembler Action
LIST An assembler listing is output

NOLIST (default) No assembler listing is output


See Also
Reference
SH-4 Assembler Listing Directives
Smart Device Development

SH-4 Assembler LIST Directive Specifiers


SH-4 Assembler LIST Directive Specifiers
.LIST is the assembler directive that controls output of the source program listing. The following list shows the possible LIST
directive output selections.
Source statements.
Source statements related to conditional assembly and macro functions.
Object code lines.
The following table shows the possible values for LIST directive output specifiers.
Typ Output(default Not Outpu Object Description
e ) t
1 ON OFF Source statement The source statements following this directive.
s

2 COND NOCOND Failed condition Condition-failed .AIF directive statements.

n/a DEF NODEF Definition Macro definition statements, .AREPEAT, .AWHILE, .ASSIGNA, and .ASSIG
NC.

n/a CALL NOCALL Call Macro call statements, .AIF, and .AENDI.

n/a EXP NOEXP Expansion Macro expansion statements, .AREPEAT, and .AWHILE.

3 CODE NOCODE Object code lines The object code lines exceeding the source statement lines.

The specification of the .LIST directive is only valid when an assembler listing is output.
See Also
Reference
SH-4 Assembler Listing Directives
Smart Device Development

SH-4 Assembler FORM Directive Specifiers


SH-4 Assembler FORM Directive Specifiers
These specifications determine the number of lines and columns in the assembler listing.
Size Specifier Listing Size
LIN=<line count> The specified value is set to the number of lines per page.

COL=<column count> The specified value is set to the number of columns per line.
See Also
Reference
SH-4 Assembler Listing Directives
Smart Device Development

SH-4 Assembler Conditional Assembly Directives


SH-4 Assembler Conditional Assembly Directives
The following table shows the conditional assembly directives.
Dire Syntax Description
ctive
.ASSI <preprocessor variable>[:].ASSIGNA <value> Defines an integer preprocess
GNA or variable; the defined variab
le can be redefined.

.ASSI <preprocessor variable>[:].ASSIGNCD<character string> Defines a character preproces


GNC sor variable; the defined varia
ble can be redefined.

.AIF.A .AIF <condition1><Source statements assembled if condition1 is Determines whether to assem


ELSIF satisfied>.AELSIF <condition2><Source statements assembled if ble a part of a source progra
.AELS condition1 is not satisfied,but condition2 is satisfied>.AELSE m according to the specified c
E.AE <Source statements assembled if neither condition1nor conditio ondition.
NDI n2 is satisfied>.AENDI
When the condition is satisfie
d, the statements after the .AI
F are assembled.
When the condition is not sati
sfied, the statements after the
.AELSE are assembled.

.ERR .ERROR[<expression>[,<expression>...]] Reports error detected at asse


OR o mbly time by user code.
r .AE
RRO The alternate spelling .AERRO
R R is also supported

.ARE .AREPEATD<count><Source statements iteratively assembled>.AEND Repeats assembly of a part of


PEAT. R a source program between .A
AEN REPEAT and .AENDR the speci
DR fied number of times.

.AWH .AWHILE <condition><Source statements iteratively assembled>.A Assembles a part of a source


ILE.A ENDW program between .AWHILE a
END nd .AENDW iteratively while t
W he specified condition is satisf
ied.

.EXIT .EXITM Terminates .AREPEAT or .AW


M HILE iterated expansion.

.ALIM .ALIMITD<maximum count> Specifies the upper limit valu


IT e for expansion of the AWHIL
E directive in the preprocesso
r.
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Miscellaneous Directives


SH-4 Assembler Miscellaneous Directives
The following table shows miscellaneous other SH-4 assembler directives.

Dir Syntax Description


ecti
ve

.RA .RADIX <radix specifier> Sets the radix, or base, for integer constants with no radix specification.
DIX
Unless otherwise specified, integer constants are assumed decimal numbers.

.WE .WEAK <weak name>,<default Declares weak external symbols.


AK name>[,<type>]
Weak externals are a mechanism for programs allowing flexibility at link time.

.EN .END Declares the end of the source program.


D

.IN .INCLUDE <file name> Includes the specified file in the current assembly.
CL
UD The file name can include the directory.
E If the file is not found in the current directory and is not specified with an abso
lute path, the assembler looks in each of the directories specified in the INCLU
DE environment variable.

.LE .LEN[ ](<character string>) Counts the length of a character string.


N

.IN .INSTR[ ](<character string Searches for a character string.


STR 1>,<character string 2>[,<s
tart position>])

.SU .SUBSTR[ ](<character strin Extracts a character string.


BST g>,<start position>,<extrac
R tion length>)

The following table shows valid RADIX specifications.


Radix Specification Description
B (or b) Binary

Q (or q) Octal

O (or o) Octal

D (or d) (default) Decimal

H (or h) Hexadecimal

X (or x) Hexadecimal
See Also
Other Resources
SH-4 Assembler Directives
Smart Device Development

SH-4 Assembler Error Messages


SH-4 Assembler Error Messages
This section contains descriptions of the SH-4 Assembler error messages.
SH-4 Assembler Error Messages 1-41
SH-4 Assembler Error Messages 70-153
SH-4 Assembler Error Messages 200-312
SH-4 Assembler Error Messages 400-453
SH-4 Assembler Error Messages 500-555
SH-4 Assembler Error Messages 611-673
SH-4 Assembler Error Messages 801-888
SH-4 Assembler Error Messages 903-998
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 1-41


SH-4 Assembler Error Messages 1-41
The following table shows the SH-4 assembler error messages 1-41.
Message # Message Text Explanation
and Severi
ty
1 FATAL Internal error: %s If this message appears, there is a bug in the assembler. Please report the exact message,
and supply a sample program that caused the message.

2 FATAL Too many errors (%d) - The maximum number of errors was exceeded. The maximum number of errors can be co
- stopping assembly ntrolled using the -maxerrors command line option.

3 FATAL %s not yet implemente If this message appears, a source program has attempted to use a technology that is not y
d et implemented in the assembler. Please report the exact message.

10 ERROR No input files were spe After parsing all of the command line options, the assembler has no input files that it was
cified -- nothing to do able to find and open.

21 ERROR Error reading file: %s Indicates that the assembler was suddenly unable to continue reading input from a file th
at it successfully opened.

30 ERROR Unknown command lin A command line option was specified that the assembler does not recognize or support.
e switch "%s"

31 ERROR Syntax error in comma A recognized command line option was specified incorrectly.
nd line switch "%s": %s

32 ERROR An argument is require An argument was not supplied for a command line option that requires one.
d for %s

33 ERROR A numeric argument is An argument was not supplied or a non-numeric argument was supplied for a command
required for %s line option that requires a numeric argument.

34 ERROR %s is out of range; mus A numeric argument was specified that is not within the valid range. The error message w
t be >= %d and <= %d ill show the valid range for the argument.

35 ERROR Invalid -show/-noshow The assembler could not parse some part of a -show or -noshow command line option.
option list: "%s"

36 WARN Ignoring unimplement A command line option or assembler directive was used that specifies a technology that i
ed option "%s" s not currently implemented in the assembler.

37 WARN Interpreting option "%s A command line option was specified in a way that could be interpreted in more than one
" as "%s" way by the assembler.
This message tells which way the assembler chose to interpret the option.
For instance, -DEBUG could mean the -D option with the argument EBUG (meaning to def
ine EBUG as 1) or it could mean the switch -debug (enabling output of debugging inform
ation).
This particular case could be avoided by using debug (or -DEBUG=1 for an EBUG equate).

40 FATAL Insufficient memory%s The assembler was unable to allocate memory for some purpose.
41 FATAL Insufficient memory; ca The assembler was unable to allocate memory for some purpose.
nnot allocate %u more
%s
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 70-153


SH-4 Assembler Error Messages 70-153
The following table shows the SH-4 assembler error messages 70-153.
Message Message Text Explanation
# and Sev
erity
70 ERROR Character %c was not e The assembler encountered a character that it did not expect to see in a source file.
xpected

71 ERROR Nonascii character (^% The assembler encountered a character that it did not expect to see in a source file.
c) in source

72 ERROR Nonascii character (0x The assembler encountered a character that it did not expect to see in a source file.
%02d) in source

73 ERROR What do you mean by " The assembler encountered a combination of characters that it does not understand.
%s"?

74 ERROR "%c" is not a valid radix A radix specifier was used that the assembler does not recognize. Use one of H, D, Q, B, X,
specifier (use HDQBXO O, h, d, q, b, x, or o.
)

75 ERROR "%s" is not a valid radix A radix specifier was used that the assembler does not recognize. Use one of the following:
specifier (use HDQBXO H, D, Q, B, X, O, h, d, q, b, x, or o.
)

76 ERROR Overflow in numeric co A numeric constant was written that cannot be represented in 32 bits. The valid range is -2,
nstant 147,483,648 to 4,294,967,295 or H'00000000 to H'FFFFFFFF.

77 ERROR A backquoted symbol n A backquote character was written (`), which can be used to enclose a symbol whose name
ame cannot span multi contains characters that are not ordinarily allowed, but no matching backquote character w
ple lines as found on the same line.
These characters must come in pairs with a symbol name between them.

78 ERROR A backquoted symbol n Two adjacent backquote characters (``) were written, which would represent a symbol who
ame cannot be null (``) se name is null (zero-length), but such a symbol name is illegal.
The assembler will also issue this error message if a backquote (`) was written as the last c
haracter on a line.

80 ERROR Parser error: %s If this message appears, there is a bug in the assembler because it should recover from the
error and issue a more helpful error message.
Please report the exact message, and if possible, provide a source file that causes the asse
mbler to issue the message.

81 ERROR Failed to parse input If this message appears, there is a bug in the assembler because it should recover from the
error and issue a more helpful error message).
Please report the exact message, and if possible, provide a source file that causes the asse
mbler to issue the message.

101 ERRO Syntax error Something is syntactically invalid on the line for which this error is reported.
R
150 ERRO Cannot put a %s instru An instruction was placed in a delay slot that is not allowed in a delay slot.
R ction in a delay slot

151 ERRO Cannot compute PC dis The assembler is not able to compute the PC displacement for a PC-relative addressing mo
R placement in a delay sl de in a delay slot because such a displacement must be relative to the PC of the branch tar
ot get.

152 ERRO Cannot use "%s #x" in s A MOV.L #imm,Rn cannot be used in a section whose alignment is less than 4, nor a MOV.
R ection (%s) with align < W #imm,Rn in a section whose alignment is less than 2.
%d

153 ERRO Instruction at odd addr An instruction at an odd address is not permitted. Attempting to execute it will cause a pro
R ess cessor exception at run time.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 200-312


SH-4 Assembler Error Messages 200-312
The following table shows the SH-4 assembler error messages 200-312.
Message Message Text Explanation
# and Se
verity
200 ERRO Symbol "%s", first us A symbol was referenced without providing a definition for it. Either define it (using .EQU, a la
R ed at %s, is never de bel, and so on), or import it (using .IMPORT or .GLOBAL).
fined

202 ERRO Illegal symbol "%s" User-defined symbols are not permitted to begin with \& or . (a period).
R

203 ERRO Illegal label symbol " User defined symbols are not permitted to begin with \& or . (a period).
R %s"

205 WAR %s has already been A symbol was declared or defined that has already been declared or defined.
N declared %s

206 ERRO %s has already been A symbol was declared or defined that has already been declared or defined.
R declared %s

207 ERRO Preprocessor symbo A preprocessor symbol was used before defining it.
R l "%s" has not been
defined yet

210 ERRO A string ("%s") is not A string constant or a string-valued symbol or expression was used in a context in which strin
R valid here gs, including character constants, are not supported.

211 ERRO Cannot %s a %s sym A symbol that cannot be imported or exported (one defined using .ASSIGN, .ASSIGNA, .ASSIG
R bol (%s) NC, .REG, or .SECTION, or an internal register symbol) was used in an .EXPORT or .GLOBAL ass
embler directive.

212 ERRO Symbol "%s" has not A symbol was referenced in a context where forward references are not permitted, but the sy
R been defined yet mbol has not yet been defined, or its value is not yet known.

213 ERRO The value of symbol A symbol was referenced in a context where forward references are not permitted, but the sy
R "%s" is not known y mbol has not yet been defined, or its value is not yet known.
et

214 ERRO "%s" is an .IMPORT s An .IMPORT symbol was used in a context where external references are not permitted.
R ymbol; its value is u
nknown

301 ERRO Too many operands; Too many operands were supplied for an instruction or an assembler directive.
R expecting %s

302 ERRO "%s" is not an opcod An operation name was specified that is not an opcode or directive, nor a defined macro. Chec
R e, directive, or macro k the spelling, or if it is a macro, make sure it has been defined before the first use.

304 ERRO Not enough operan Fewer operands were supplied than are required for an instruction or an assembler directive.
R ds; expecting %s
307 ERRO This addressing mod An addressing mode was specified that is not legal for the instruction or the instruction/modifi
R e is not legal here er combination, or a modifier was specified that is not legal for the instruction.

308 ERRO Invalid addressing m A combination of addressing modes was specified that is not legal for the instruction or the in
R ode (incompatible o struction/modifier combination, or a modifier was specified that is not legal for the combinati
perands) on of addressing modes and the instruction.

309 ERRO Invalid addressing m A register name was specified in a place where that register (or register type) is not legal.
R ode (illegal register
%s): "%s"

310 ERRO Cannot use %s here; A register other than r0 was specified in a context where only r0 is legal.
R only r0 is valid

311 ERRO "%s" (%s) is not a re The symbol specified as the operand of a .REG directive is not a valid register name.
R gister

312 ERRO This would require An operation was attempted that cannot be represented in the MS-COFF object format as curr
R %s relocation ently defined.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 400-453


SH-4 Assembler Error Messages 400-453
The following table shows the SH-4 assembler error messages 400-453.
Messag Message Text Explanation
e # and
Severity
400 ERR Character constant A character constant may be no longer than four characters.
OR longer than 4 chara
cters: "%s" This message might also be issued if a string (or a string-valued symbol or expression) is supplie
d in a context where a number is expected.

402 ERR %d (0x%x) is out of An operand value is outside of the legal range.
OR range; must be >=
%d and <= %u The message tells you what the valid range is.
This message can also be issued when an attempt is made to use a PC-relative operation (such a
s a branch, or a MOV @(disp, PC),Rn) to refer a location that is too far away, or that is a backwar
d reference for an instruction that can only support forward references.

403 ERR Cannot %s when o Only certain arithmetic operations are supported on relative values.
OR ne or more operan
ds are relocated

404 ERR Relocated value not A relative value or relative-valued symbol or expression was used in a context where only absolu
OR valid here; must be te values are allowed.
absolute

405 ERR Cannot %s import s Only certain arithmetic operations are supported on relative values and external symbols.
OR ymbols or between
sections

406 ERR Cannot %s expr w/ Only certain arithmetic operations are supported on relative values and external symbols.
OR %d reloc%s and ex
pr w/%d reloc%s

408 ERR Cannot divide by ze It is mathematically impossible to divide by zero.


OR ro

413 ERR Unknown relational The only supported relational operators besides the regular C operators are EQ, NE, GT, LT, GE, a
OR operator: "%s" nd LE, regardless of case.

420 ERR Syntax error in ope The assembler cannot recognize an operand of an instruction.
OR rand

421 ERR Syntax error in expr The assembler cannot recognize an expression.
OR ession

422 ERR Cannot use a %s sy An attempt was made to use a register in an expression.
OR mbol here
This is permitted only in a few specific situations.

423 ERR Expression must be An instruction was written like MOV symbol,Rn or MOVA symbol,Rn where symbol is an absolut
OR relative (or use #im e symbol (such as a .EQU symbol might be).
mediate)
To move the value of the symbol into the register, use MOV #symbol,Rn.
424 ERR The "%s" operator ( An operator was used that is recognized but not supported, such as ++ or --.
OR %s) is not supporte
d

425 ERR Expression result o An arithmetic operation resulted in overflow (loss of important bits).
OR verflow: %s %d (0x
%x)

426 ERR Expression result o An arithmetic operation resulted in overflow (loss of important bits).
OR verflow: %d (0x%x)
%s %d (0x%x)

427 ERR Expression result o An arithmetic operation resulted in overflow (loss of important bits).
OR verflow: %s %u (0x
%x)

453 ERR %s needs a literal p The source line noted in the text of the message (where the %s is above) contains a literal pool re
OR ool before here ference that cannot reach as far as the address of the source line noted at the beginning of the er
ror message line.
Insert a .POOL directive or an unconditional branch somewhere between the two source lines.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 500-555


SH-4 Assembler Error Messages 500-555
The following table shows the SH-4 assembler error messages 500-555.
Message Message Text Explanation
# and Sev
erity
500 ERRO Label required here A label was not supplied for a directive that requires one. As a result, the directive might b
R e ignored.

501 ERRO Illegal value for .ORG%s An .ORG directive was used to move the location counter backward to a lower address th
R an its current value or more than 1 MB forward.
If the intent was to move the location counter forward by more than 1 MB, consider that t
his would occupy that amount of space in the object file, due to the MS-COFF object file f
ormat.
Another approach may be best.

503 ERRO Exported symbol "%s" n The symbol named in the message was declared in a .EXPORT directive, but was not defin
R ot defined ed anywhere in the source file.

516 ERRO This %s directive conflict An operand of a .PRINT directive conflicts with an operand of a previous .PRINT directive,
R s with a previous %s or an operand of an .OUTPUT directive conflicts with an operand of a previous .OUTPUT d
irective.

517 ERRO The result of this express An expression was supplied whose value is not yet defined in a context where the value
R ion is not known yet must be known on the assembler's first pass through the file.

519 ERRO String is %u characters l The string(s) supplied for a .SDATAC or .SDATACB directive must be no more than 255 ch
R ong; maximum is 255 aracters long, because the length is represented in a single byte.

520 ERRO A string or string express A numeric constant or a numeric-valued symbol or expression was supplied in a context
R ion is required %s where a string is required.

521 WAR A literal pool would neve A .NOPOOL directive was put in a place where the assembler would not have generated a
N r be put here anyway literal pool anyway.

522 WAR .POOL illegal in delay slo A literal pool wound up after a delayed branch instruction; the assembler automatically s
N t of %s upplies a NOP instruction to fill the delay slot.

531 ERRO Invalid section type "%s" An invalid section type was specified The valid section types are CODE, DATA, DUMMY, a
R nd BSS, without regard to case.

532 ERRO Section type (%s) must f The section type cannot be specified before the section name.
R ollow section name (%s)

533 ERRO Section type (%s) cannot A value cannot be specified for the section type.
R have a value

534 ERRO Invalid option "%s" A keyword option was supplied for a directive for which it is not valid.
R

535 ERRO Option "%s" cannot have A value was supplied for an option that cannot have a value.
R a value
536 ERRO Option "%s" must have a A value was not supplied, or a non-numeric value was supplied, for an option that require
R numeric value s a numeric value.
537 ERRO Alignment must be a po See the .ALIGN directive.
R wer of 2 between 1 and
8192.

538 ERRO "%s": MS-COFF doesn't s This message only occurs if an attempt is made to use a particular technology provided b
R upport absolute sections y other Renesas assemblers that is not supported in this assembler due to restrictions of t
he MS-COFF object format.

539 ERRO "%s": MS-COFF Cannot e Only relative values may be exported; absolute symbols cannot be exported.
R xport non-relocatable .E
QU's

540 ERRO "%s": MS-COFF Cannot e Symbols defined in a section of type DUMMY cannot be exported.
R xport syms from DUMM
Y section

541 ERRO Illegal alignment %u; mu An alignment value must be a power of two (2^0 through 2^6).
R st be a power of two

542 ERRO Block count too large (m A block count was specified that would result in more than 4 GB of data.
R ax %u) -- directive ignor
ed

543 ERRO Cannot export "%s"; its v An .EQU symbol was exported whose value is dependent on an external (.IMPORT) symbo
R alue depends on "%s" l.

544 WAR Code not in function; nee All code should appear between an .ENTRY directive and an .ENDF directive.
N d a .ENTRY

545 WAR Missing .PROLOG betwe Each function (.ENTRY and .ENDF pair) should have a .PROLOG directive inside it somewh
N en .ENTRY/.ENDF for "%s ere.
"

546 WAR Missing .ENDF; closing f All code should appear between a .ENTRY directive and a .ENDF directive.
N unction "%s"

547 ERRO No matching .ENTRY for The assembler encountered a .ENDF directive that does not seem to have a matching .EN
R .ENDF TRY directive.

548 ERRO No active .ENTRY for .PR The assembler encountered a .PROLOG directive when there is no .ENTRY directive active
R OLOG (that is, not yet terminated by a .ENDF directive).

549 ERRO .PROLOG already specifi A .PROLOG directive was specified more than once in a single function (.ENTRY and .END
R ed for function "%s" F pair).

550 WAR .END encountered; ignori A .END directive was encountered in a file that was not the last file specified on the comm
N ng files starting with %s and line.
The rest of the files specified on the command line will be ignored.

551 ERRO .SECTION ASSOC= must The ASSOC option of the .SECTION directive must have a value that is a section name (inc
R be followed by a section luding a COMDAT style section name, such as ".text{_main}").
name
552 ERRO Section "%s" must be CO Either the section being declared with the current .SECTION directive or the target of an A
R MDAT to allow option " SSOC= option of the current .SECTION directive is not a COMDAT style section.
%s"

553 ERRO .PDATA is illegal betwee It is no longer valid to specify a .PDATA directive after a .ENTRY directive and before a .EN
R n .ENTRY and .ENDF DF directive; the .PDATA directive must now be specified before the .ENTRY to which it sh
ould apply.

554 ERRO Prolog is too long (%u, The .BIGENTRY directive must be used in place of the .ENTRY directive for a function who
R max %u); use .BIGENTRY se prolog is more than 510 bytes long.

555 ERRO Function is too long (%u, The .BIGENTRY directive must be used in place of the .ENTRY directive for a function that i
R max %u); use .BIGENTRY s more than 16,777,214 bytes long.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 611-673


SH-4 Assembler Error Messages 611-673
The following table shows SH-4 assembler error messages 611-673.
Message # Message Text Explanation
and Severit
y
611 ERROR A macro name is require A macro name must be specified with the .MACRO directive.
d for .MACRO
In particular, the macro name goes on the right side of the .MACRO directive (in the firs
t operand position, not in the label position).

612 ERROR Syntax error in macro na The assembler encountered something that does not look like a symbol name immedia
me for .MACRO tely following a .MACRO directive.

619 ERROR Invalid macro parameter A macro parameter name was specified that begins with a number. This is not permitte
name "%s" d.

622 ERROR No matching paren for m The assembler was not able to find a ) to match a \( which it encountered in a macro ex
acro expansion exclusion pansion.
The macro expansion exclusion syntax \( ... ) is not allowed to start on one line and end
on another line; it must all occur on a single line of the macro.

624 ERROR Too many macro parame The macro used has too many parameters (operands).
ters (max %d)

631 ERROR %s without matching %s The .AENDI or .AENDR or .AENDW given does not seem to have a matching .AIF, .AREPE
AT, or .AWHILE.
This error also appears if one of these constructs is nested inside another, and the end
directive for the inner one is omitted.

632 ERROR Cannot have %s after .AE An .AELSIF or an .AELSE cannot be put after an .AELSE in the same .AIF block.
LSE

633 ERROR %s still active at end of " An .AIF, .AREPEAT, .AWHILE, or .MACRO (macro definition) was still in progress when th
%s" macro expansion e end of a macro was reached.
These constructs cannot span macro boundaries.

634 ERROR %s from line %d still acti An .AIF, .AREPEAT, .AWHILE, or .MACRO (macro definition) was still in progress when th
ve at end of file %s e end of a file was reached.
These constructs cannot span file boundaries.

635 ERROR .EXITM outside of any .AR The assembler encountered an .EXITM directive that seems to be stranded without any l
EPEAT, .AWHILE, or macr oop or macro to exit from.
o
This message might also be issued if a previous error caused the assembler to ignore t
he beginning of such a construct.

636 ERROR .END with %s still active The assembler encountered an .END directive while an .AIF, .AREPEAT, .AWHILE, or mac
ro expansion was still in progress. The assembler ignores the .END directive in this case.

670 ERROR This syntax is only legal i A special facility was used that is only available when a macro is being expanded, for ex
n a macro: "%s" ample, in a macro body).
671 ERROR Syntax error in macro ar The assembler was unable to parse one or more of the arguments to a macro.
guments
It tries to continue as best it can.

672 ERROR End of file reached while An .AIF, .AREPEAT, .AWHILE, or .MACRO (macro definition) was still in progress when th
processing %s e end of a file was reached.
These constructs cannot span file boundaries.
Error 634 is more expected than this one.

673 ERROR Unknown macro parame A macro parameter name was referenced that is not defined for the macro currently be
ter name "%s" ing expanded.
In the case of nested macro expansion, only the arguments of the innermost active mac
ro are accessible.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 801-888


SH-4 Assembler Error Messages 801-888
The following table shows SH-4 assembler error messages 801-888.
Message Message Text Explanation
# and Sev
erity
801 WAR Symbol %s already d A symbol was redeclared or redefined that has already been declared or defined.
N efined as a %s

802 ERRO Symbol %s already d A symbol was redeclared or redefined that has already been declared or defined.
R efined as a %s

807 WAR Invalid size specificati An illegal size specification (modifier) was supplied. The only legal modifiers are B, W, L, b, w,
N on "%c" and l (lowercase L).

808 WAR A size specification (" A size specification (modifier) was supplied for an instruction or directive that cannot have o
N %c") is not allowed h ne.
ere

810 WAR Too many operands; More operands were supplied than can be used by the instruction or directive.
N expecting %s

811 WAR Label not allowed her A label was supplied on a directive that cannot have one. The label is ignored, and will not be
N e; ignoring "%s" defined. This can lead to further error messages.

813 WAR Section "%s" has alre The type or attributes of a section cannot be changed after the first time it is declared (by usi
N ady been declared %s ng the .SECTION directive).

816 WAR Unaligned %s size dat A .DATA or .RES or related directive was written that is attempting to place a word at an odd
N a at 0x%x address or a longword at an address that is not a multiple of 4.
Be careful. Attempting to access such data in a single instruction causes a processor exceptio
n.

817 WAR Beware of possibly u An alignment was specified of less than 2 in a code section.
N naligned code
This can result in code being placed at an odd address.
An attempt to execute code at an odd address causes a processor exception.

818 WAR Cannot guarantee ali A value was specified for an .ALIGN directive that is greater than the alignment of the current
N gn > section "%s"'s al section. Such an alignment cannot be guaranteed.
ign (%d)

826 WAR Instructions valid onl An executable or extended instruction was written in a section that is not a CODE section. Thi
N y in Code section; "%s s is not permitted.
" is %s

827 WAR %s invalid in a %s sec Uninitialized data was reserved in a CODE section, or initialized data in a DUMMY or BSS sect
N tion (%s) -- ignored ion. This is not permitted.

838 ERRO A character string ma This message generally indicates a missing closing quote or the presence of an embedded q
R y not span multiple li uote in the string that was not doubled.
nes
839 WAR You may not specify A value was specified for a keyword option that cannot have a value.
N a value for %s; it is ig
nored

840 WAR Block count is zero -- A .RESB or .DATAB or .SDATAB directive was written with a zero block count. This effectively
N directive ignored nullifies the directive.

841 WAR %u is too large to fit i A control character expression resulted in a value greater than 255.
N n a character; using %
u

842 WAR "%s" is abs; expr is loc When a branch refers to a symbol in an absolute section, the symbol is assumed to represent
N ation, not displaceme a location, not a displacement. Absolute sections are not supported.
nt

851 WAR Overriding %s from . A .PDATA directive has overridden a previous .PDATA directive.
N PDATA %s
This can only happen if two .PDATA directives are written in the same section without a valid
.ENDF between them.

852 WAR %s from .PDATA at % A .PDATA directive was written that did not have a valid .ENDF following it in the same sectio
N s(%d) was never used n.

870 WAR Unaligned displacem A displacement value that refers to a word was an odd number, or a displacement value that
N ent value %d; truncati refers to a longword was not a multiple of 4.
ng to %d
The stray least significant bits are dropped on the floor.

871 WAR PC-relative in delay sl When a PC-relative instruction is written in a delay slot, the PC that it is relative to is the PC o
N ot is branch-dest relat f the branch destination
ive

876 WAR Inserted BRA and NO The assembler automatically inserted a BRA to skip over a literal pool (and a NOP to fill the B
N P before literal pool RA's delay slot) because it observed that the literal pool did not follow the delay slot instructi
on of an unconditional branch.

880 WAR Function end after del The assembler encountered an .ENDF directive (or the end of the input file or section) with a
N ayed branch branch's delay slot still unfilled.
The assembler supplies a NOP to fill the delay slot.

886 WAR .END missing -- prete The assembler reached the end of the input without seeing an .END directive.
N nding there was one

887 WAR .END reached -- ignor The assembler encountered an .END directive but noticed that there was something more th
N ing to EOF an blank lines after it.
Whatever it was, the assembler ignored it.

888 WAR Entry point not suppo The .END directive may not have an operand.
N rted
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

SH-4 Assembler Error Messages 903-998


SH-4 Assembler Error Messages 903-998
The following table shows SH-4 assembler error messages 903-998.
Message # an Message Text Explanation
d Severity
903 ERROR %s: %s There was some problem opening or writing to the assemble listing file.

904 ERROR %s: %s There was some problem opening or writing to the object file.

907 ERROR Cannot allocate %u bytes of me Probably as a result of a .ORG directive, the assembler is unable to allocate en
mory for section "%s" ough memory to store the data for the section named.
It will try to continue the assembly, if possible.

998 ERROR %s This message occurs when an .AERROR or .ERROR directive is assembled.
See Also
Other Resources
Renesas SH-4 Series Assembler
Smart Device Development

MIPS Family Processors


MIPS Family Processors
MIPS Technologies, Inc. designs high-performance, low-power, 32-bit and 64-bit reduced instruction-set computing (RISC)
microprocessor architectures and cores for embedded systems. MIPS licenses technology to semiconductor companies and
system OEMs.
The MIPS RISC architecture CPUs range from 50 MHz 32-bit R3000-based devices up to 266 MHZ 64-bit R5000-based CPUs.
In This Section
Intrinsic Functions for MIPS Microprocessors
Provides reference information about MIPS-specific intrinsic functions.
MIPS Compiler Options
Provides reference information about MIPS-specific compiler options.
MIPS Calling Sequence Specification
Describes registers, stack frame layout, and assemblers.
Related Sections
Differences Between Desktop and Device Compilers
Describes important differences between desktop compilers and device compilers in build options, intrinsic functions, and
exception handling.
Smart Device Development

Intrinsic Functions for MIPS Microprocessors


Intrinsic Functions for MIPS Microprocessors
The functions that the MIPS device compiler recognizes are known as supported intrinsic functions. The compiler translates
such intrinsic functions into a call to a C run-time (CRT) routine, or into a series of one or more instructions.
Intrinsic functions that the compiler always translates into a series of instructions are expanded functions. For example, the
compiler recognizes sqrt as a common intrinsic function for all MIPS targets. sqrt is a floating-point (FP) intrinsic function
which takes an FP argument and returns an FP value.
MIPS microprocessors with a FP unit support the sqrt instruction. That is, for MIPS microprocessors with an FP unit the
compiler translates the intrinsic function sqrt into a sqrt instruction native to the microprocessor.
For MIPS microprocessors without a FP unit, the compiler translates sqrt into a call to a CRT routine. In this way, sqrt is an
intrinsic function for all MIPS targets, but is expanded into an instruction only for MIPS II FP and MIPS IV FP. For more
information about sqrt, see the Run-Time Library Reference.
The following table shows supported intrinsic functions that the compiler recognizes for specific indicated MIPS ISAs.

Function MIPS 16 ASE MIPS II ISA MIPS II ISA FP unit MIPS IV ISA FP unit

__emul Y Y Y Y

__emulu Y Y Y Y

__ll_lshift Y Y Y Y

__ll_rshift Y Y Y Y

__ull_rshift Y Y Y Y

_enable Y Y Y Y

_disable Y Y Y Y

__regsize Y Y Y Y

_InterlockedDecrement Y Y Y Y

_InterlockedExchangeAdd Y Y Y Y

_InterlockedCompareExchange Y Y Y Y

_InterlockedIncrement Y Y Y Y

_InterlockedExchange Y Y Y Y
See Also
Other Resources
Run-Time Library Reference
Smart Device Development

__emul
__emul
This function multiplies a 32-bit value in register RT times a 32-bit value in register RS, and obtains a 64-bit result.

__int64 __cdecl __emul(


int1,
int2
);

Parameters
int1
[in] Value in RT the first term in the multiplication.
int2
[in] Value in RS, the second term in the multiplication.
Return Values
Result of binary arithmetic.
Remarks
The compiler translates this function into the mult instruction.
Requirements
Routine Required header Architecture
__emul <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

__emulu
__emulu
This function multiplies a 32-bit unsigned value in register RT times a 32-bit unsigned value in register RS, and obtains a 64-
bit result.

__int64 __cdecl __emulu(


int1,
int2
);

Parameters
int1
[in] Value in RT, the first term in the multiplication.
int2

[in] Value in RS, the second term in the multiplication.


Return Values
Result of binary arithmetic.
Remarks
The compiler translates this function into the multu instruction.
Requirements
Routine Required header Architecture
__emulu <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
__emul
Smart Device Development

__ll_lshift
__ll_lshift
This function shifts a 64-bit word to the left a specified number of bits.

__int64 __cdecl __ll_lshift(


int64,
int
);

Parameters
int64
[in] The value to shift.
int
[in] The number of bits to shift.
Return Values
None.
Remarks
The compiler translates this function into the SLL instruction.
Requirements
Routine Required header Architecture
__ll_lshift <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

__ll_rshift
__ll_rshift
This function shifts a 64-bit word to the right a specified number of bits.

__int64 __cdecl __ll_rshift(


int64,
int
);

Parameters
int64
[in] The value to shift.
int
[in] The number of bits to shift.
Return Values
None.
Remarks
The compiler translates this function into the SRL instruction.
Requirements
Routine Required header Architecture
__ll_rshift <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

__regsize
__regsize
This function returns the register size.

int __cdecl __regsize(void);

Parameters
None.
Return Values
The size of the target register.
Requirements
Routine Required header Architecture
__regsize <stdlib.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

__ull_rshift
__ull_rshift
This function shifts a 64-bit unsigned word to the right a specified number of bits.

unsigned __int64 __cdecl __ull_rshift(


unsigned__int64,
int
);

Parameters
unsigned_int64
[in] The value to shift.
int
[in] The number of bits to shift.
Return Values
None.
Remarks
The compiler translates this function into the SRA instruction.
Requirements
Routine Required header Architecture
__ull_rshift <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_enable
_enable
This function enables MIPS16 ASE.

void _enable(void);

Parameters
None.
Return Values
None.
Requirements
Routine Required header Architecture
_enable <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_disable
_disable
This function disables MIPS16 ASE.

void _disable(void);

Parameters
None.
Return Values
None.
Requirements
Routine Required header Architecture
_disable <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_InterlockedCompareExchange
_InterlockedCompareExchange
This function atomically compares a variable value to a comparison value and exchanges the value of Destination with
Exchange if they are the same.
The function prevents more than one thread from using the same variable simultaneously.

InterlockedCompareExchange(
PVOID* Destination,
PVOID ExChange,
PVOID Comperand
);

Parameters
Destination
[out] Pointer to the value that the function compares to Comperand.
ExChange
[in] Value used to replace contents of Destination, if necessary.
Comperand
[in] Standard value used for comparison to the value in Destination.
Return Values
Initial value of the variable pointed to by Destination.
Remarks
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple
threads. The threads of different processes can use this mechanism if the variable is in shared memory.
Requirements
Routine Required header Architecture
_InterlockedCompareExchange <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_InterlockedDecrement
_InterlockedDecrement
This function performs an atomic addition of a decrement value to an addend variable. The function prevents more than one
thread from using the same variable simultaneously.

InterlockedDecrement(
PLONG Addend
);

Parameters
Addend
[in] Value to be decremented.
Return Values
Result of binary arithmetic.
Remarks
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple
threads. The threads of different processes can use this mechanism if the variable is in shared memory.
Requirements
Routine Required header Architecture
_InterlockedDecrement <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_InterlockedExchangeAdd
_InterlockedExchangeAdd
This function performs an atomic addition of an increment value to an addend variable. The function prevents more than one
thread from using the same variable simultaneously.

InterlockedExchangeAdd(
PLONG Addend,
LONG Increment
);

Parameters
Addend
[in, out] Value to be incremented.
Increment

[in] Value used to increment Addend.


Return Values
The initial value of the variable pointed to by Addend.
Remarks
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple
threads. The threads of different processes can use this mechanism if the variable is in shared memory.
Requirements
Routine Required header Architecture
_InterlockedExchangeAdd <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_InterlockedIncrement
_InterlockedIncrement
This function performs an atomic addition of an increment value to an addend variable. The function prevents more than one
thread from using the same variable simultaneously

InterlockedIncrement(
PLONG Addend
);

Parameters
Addend
[in] Value to be incremented.
Return Values
None.
Remarks
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple
threads.
The threads of different processes can use this mechanism if the variable is in shared memory.
Requirements
Routine Required header Architecture
_interlockedIncrement <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

_InterlockedExchange
_InterlockedExchange
This function atomically exchanges a pair of 32-bit values. The function prevents more than one thread from using the same
variable simultaneously.

LONG InterlockedExchange(
LONG volatile* Target,
LONG Value
);

Parameters
Target
[in, out] Pointer to the value to be exchanged. The function sets this variable to Value, and returns its prior value.
Value

[in] Value to be exchanged with the value pointed to by Target.


Return Values
The function returns the initial value of the target.
Remarks
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple
threads. The threads of different processes can use this mechanism if the variable is in shared memory.
The variable pointed to by the Target parameter must be aligned on a 32-bit boundary; otherwise, this function will fail on
multiprocessor x86 systems and any non-x86 systems.
This function should not be used on memory allocated with the PAGE_NOCACHE modifier.
Requirements
Routine Required header Architecture
_InterlockedExchange <winnt.h> MIPS16, MIPSII, MIPSIII, MIPS IV, MIPS 32
See Also
Reference
Intrinsic Functions for MIPS Microprocessors
Smart Device Development

MIPS Compiler Options


MIPS Compiler Options
The following table shows compiler switches for MIPS microprocessors.
Option Description
/QMmipsNN - Generate Code f Generates code for MIPS I, II, III, IV, V, 32, and 64 Instruction Set Architectures (ISA)s.
or Specific MIPS ISA

/QMmips16 - Generate Code f Generates code for MIPS16 ASE.


or MIPS16 ASE

/QMFPE - Floating Point Emula Enables floating-point emulation, using floating-point hardware.
tion

/QMRnnnn - Optimize for Spec Enables chip-specific inline assembler for Phillips PR3900, NEC VR4100, NEC VR4200. and NE
ific MIPS chip C VR4300, and generates code for corresponding MIPS ISA.
See Also
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

/QMmips16 - Generate Code for MIPS16 ASE


/QMmips16 - Generate Code for MIPS16 ASE
This option generates code for the MIPS16 Application-Specific Extension (ASE) to the MIPSII ISA. MIPS16 is especially
advantageous for embedded systems where memory is of a premium.
See Also
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

/QMFPE - Floating Point Emulation


/QMFPE - Floating Point Emulation
The /QMFPE options control compiler expectations for floating point arithmetic support.
The following table details this option.
Opti Description Default status
on
/QM Turns on floating point emulation. Default when any of the following are true:.No /QMmipsNN option specif
FPE ied -or-/QMmips1 or the /QMmips2 option specified.

/QM Causes the compiler to generate instructions Default when /QMmips3, /QMmips4, /QMmips5, or /QMmips64 optio
FPE - for a floating-point hardware unit. n specified.
See Also
Reference
/QMmipsNN - Generate Code for Specific MIPS ISA
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

/QMmipsNN - Generate Code for Specific MIPS ISA


/QMmipsNN - Generate Code for Specific MIPS ISA
The following options specify which MIPS ISA the compiler generates code for.
Switch Description Default status
/QMmips1 Generates code for the older MIPS I instruction set. /QMFPE is default.

/QMmips2 Generates code for the MIPS II instruction set. /QMFPE is default.

/QMmips3 Generate code for MIPS III ISA. /QMFPE- is default.

/QMmips4 Generate code for MIPS IV ISA. /QMFPE- is default.

/QMmips5 Generate code for MIPS V ISA. /QMFPE- is default.

/QMmips32 Generate code for MIPS 32 ISA Not specified.

/QMmips64 Generate code for MIPS 64 ISA Not specified.


See Also
Reference
/QMFPE - Floating Point Emulation
Smart Device Development

/QMRnnnn - Optimize for Specific MIPS chip


/QMRnnnn - Optimize for Specific MIPS chip
These options cause the compiler to generate code optimized for a particular MIPS ISA, and allow microprocessor-specific
inline assembly instructions. The compiler may then choose instructions or sequences of instructions specific to that particular
processor, and produce an executable that is incompatible with any other processor.
The following table shows the implementation of /QMRX000 switches.
Option Equivalent to Processor
/QMR3900 -QMmips2 -D_M_MRX000=3900 R3900

/QMR4100 -QMmips2 -D_M_MRX000=4100 R4100

/QMR4200 -QMmips2 -QMFPE- -D_M_MRX000=4200 R4200

/QMR4300 -QMmips2 -QMFPE- -D_M_MRX000=4300 R4300

/QMR5400 -QMmips4 -QMFPE- -D_m_MRX000=5400 R5400

These switches and the /QMmips16 - Generate Code for MIPS16 ASE switch are mutually exclusive.
See Also
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

MIPS Calling Sequence Specification


MIPS Calling Sequence Specification
The MIPS Calling Sequence Specification for provides direction for the development of compilers and assembly language
programs for the MIPS microprocessor.
In addition, the standard enables the development of tools, debuggers, and operating system utilities that perform automated
walking of the call stack.
In This Section
MIPS Registers
Specifies the register assignment for MIPS I, II, III, and IV architectures.
MIPS Stack Frame Layout
Describes the MIPS stack frame layout.
MIPS Prolog and Epilog
Provideds reference information about code sequences and macros needed to implement Structured Exception Handling on
MIPS microprocessors
Related Sections
Differences Between Desktop and Device Compilers
Describes differences in intrinsic functions, build options, and alignment issues.
SEH in RISC Environments

Describes how structured exception handling occurs in RISC microprocessor environments.


Smart Device Development

MIPS Registers
MIPS Registers
The MIPS microprocessor has 32 general-purpose registers.
Registers are 32 bits for MIPS I instruction set architecture (ISA) and II ISA.
MIPS III and higher ISAs have 32-bit registers when running in 32-bit mode, and 64-bit registers when running in 64-bit
mode.
Registers $1, $26, $27, $29 are reserved for special purposes by the assembler, compiler and operating system.
Register $0 is hard wired to the value zero, and $31 is the link register for jump and link instructions but can be used
with other instructions with caution.
The following table summarizes the usage convention for these registers.
Regis Comm Description
ter N on Na
ame me
$0 zero Always has the value 0. Any writes to this register are ignored.

$1 at Assembler temporary.

$2-$3 v0-v1 Function result registers.


Functions return integer results in v0, and 64-bit integer results in v0 and v1 when using 32-bit registers.
In cases where floating-point hardware is not present, or when compiler options enable floating-point emulatio
n, functions return single precision floating-point results in v0 and double precision floating-point results in v0
and v1 when using 32-bit registers.
v0 and v1 can be temporary registers.
Not preserved across function calls.

$4-$7 a0-a3 Function argument registers that hold the first four words of integer type arguments.
Functions use these registers to hold floating-point arguments.
When floating-point hardware is not present, or compiler options enable floating-point emulation, functions us
e a0 to hold the first single precision floating-point argument and a1 to hold the second single precision floatin
g-point argument.
Functions use a0-a1 for the first double precision floating-point argument, and a2-a3 to hold the second doubl
e precision floating-point argument.
Not preserved across function calls.

$8-$1 t0-t9 Temporary registers you can use as you want. Not preserved across function calls.
5,
$24-$
25

$16-$ s0-s8 Saved registers to use freely.


23, $3
0 Preserved across function calls. These registers must be saved before use by the called function.

$26-$ k0-k1 Reserved for use by the operating system kernel and for exception return.
27
$28 gp Global pointer.
Not used in Windows CE and may be used as save register for called functions.

$29 sp Stack pointer.

$31 ra Return address register, saved by the calling function. Available for use after saving.

$f0 n/a Function return register used to return float and double values from function calls.

($f12, n/a Two pairs of registers used to pass float and double valued parameters to functions.
$f13)
Pairs of registers are parenthesized because they have to pass double values.
and
To pass float values, only $f12 and $f14 are used.
($f14,
$f15)

The following list contains additional information on floating-point registers:


In MIPS ISAs I, II, and in MIPS III and up ISAs running in 32-bit mode, only $f4, $f6, $f8, $f10, $f16, and $f18 temporary
registers are available.
When manipulating these registers with double precision instructions, the high-order 32-bits are in the implied odd
register. The odd registers are not directly accessible.
Permanent registers $f20, $f22, $f24, $f26, $f28, and $f30 are registers where values are preserved across function calls.
In MIPS architectures III and up running in 64-bit mode, the following registers are also available as temporary registers:
$f1, $f3, $f5, $f7, $f9, $f11, $f17, $f19, $f21, $f23, $f25, $f27, $f29, $f31.
See Also
Reference
MIPS Stack Frame Layout
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

MIPS Stack Frame Layout


MIPS Stack Frame Layout
The stack frame consists of four areas:
Parameter or argument area
Local variable area
Register save area
Argument build area
The calling function allocates space on the stack for all arguments, even though it may pass some of the arguments in
registers. The calling function should reserve enough space on the stack for the maximum argument list required by calls from
the calling function.
The function must allocate space for at least four words, even if it passes fewer parameters.
Functions should allocate space for all arguments, regardless of whether the function passes the arguments in registers. This
provides a save area for the called function for saving argument registers if these registers need to be preserved.
The function allocates argument registers for the first argument. It allocates any argument registers remaining to the second
argument, and so on until it uses all the argument registers or exhausts the argument list. All remaining parts of an argument
and remaining arguments go on the stack.
The argument register allocation preserves that same alignment as if in memory. When mapping some argument lists some
argument registers may not contain anything relevant the same as padding space in memory.
See Also
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

MIPS Prolog and Epilog


MIPS Prolog and Epilog
Prolog and epilog code segments are required to implement SEH for MIPS microprocessors.
The MIPS prolog contains code that sets up the stack frame for a routine, and the epilog contains the code that removes the
routine's frame and then returns to the calling function. The MIPS compiler generates prolog and epilog code to perform these
tasks, but you must write the prolog and epilog code for any assembly code functions that you write.
In This Section
MIPS Assembler Macros
MIPS Prolog
MIPS Epilog
Related Sections
SEH in RISC Environments
MIPS Stack Frame Layout
Smart Device Development

MIPS Prolog
MIPS Prolog
The MIPS prolog has several immediately contiguous parts, regardless of whether MIPS 16-bit mode, MIPS 32-bit mode, or
MIPS 64-bit mode is in force.
The following steps show the required elements of a MIPS prolog.
The code examples shown apply to MIPSII. For MIPS IV, replace the sw instruction with sd, and replace the lw instruction with
ld.
1. Define the prolog and set up the entry.
.ent <routine_name>
<routine_name>:

2. Reserve space for the stack frame.


Addiu sp, -<frame size>

An extended addiu instruction of four bytes is generated for frame sizes greater than 1024.
If the frame size exceeds 32768, update the stack pointer with a constant from the literal pool using the following
sequence of instructions.
hw $3, <frame size> constant offset(pc)
move $2, $29
subu $2, $2, $3
move $29, $2

The size of the stack frame must be a multiple of eight. This includes space for local variables and temporaries, saved
registers, and a procedure call argument area for non-leaf routines.
Any routine that uses registers $16-$23, or $30, or any floating-point register that the called function saves, must save
these registers.
The procedure call argument area contains the maximum number of bytes required for the arguments of any procedure
called in a non-leaf routine. This number of required bytes includes those arguments that the function can pass in
registers, unless the N32 calling convention is in use.
3. Set up a virtual frame pointer. The virtual frame pointer is sp($29) added to the frame size.
.frame framereg (usually $29), framesize, returnreg (usually $31)

4. Set a bit in the bitmask for each general-purpose register saved. Set bits in little endian order. The frame offset is the
offset, a negative number, from the virtual frame pointer where the register save area begins.
.mask mask, <frame offset>

5. Store any registers that need to be saved.


For example, if ra needs to be saved:
sw ra, <frame size> + <frame offset>(sp)

If subsequent lower number registers need to be saved, the offset depends on the MIPS mode. If the next register is a
MIPS16 register,
sw $<mips16 register>, <frame size> + <frame offset> - n(sp)

Otherwise
move $2, <mipsii register>
sw $2, <frame size> + <frame offset> - n(sp)
Where N is four and is incremented by four for each subsequent lower number register to be saved.
If the <frame size> + <frame offset> is greater than 32767, then the following 3 instruction sequence is required before
executing the register save loop:
lw $2, <frame size> + <frame offset>constant offset(pc)
move $2, $29
addu $3, $2, $3

The sw instructions depend on the mode of the MIPS register. If the next register is a MIPS16 register:
sw $<mips16 register>, -n($3)

Otherwise
move $2,$<mipsii register>
sw $2, -n($3)

6. Mark the end of the prolog.


.prologue 0

See Also
Reference
MIPS Assembler Macros
Other Resources
MIPS Prolog and Epilog
Smart Device Development

MIPS Epilog
MIPS Epilog
While each procedure has only one prolog, a procedure may contain any number of epilogs if the procedure uses multiple exit
points. Each epilog is required to have certain specific parts. All parts are contiguous with no intervening instructions.
The following steps shows how to restore the registers saved by the called function for a MIPS ISA. For MIPS IV, replace the lw
instruction with ld.
Note that MIPS16 epilogs employ slightly different guidelines to restore the registers saved by the called function.
1. Issue a restore for each register saved in the prologue
lw $31, framesize+frameoffset($29) ; restore return addresslw reg, framesize+fram
eoffset-N($29) ; restore integer register
ldc1 reg, framesize+frameoffset-N($29) ; restore float register

Where N is four and incremented by four for each subsequent lower number register saved.
2. Return from the procedure.
j $31

3. End the routine.


.end routine_name

The minimum proper epilog for a leaf routine includes the return jump and the .end. Additionally, for a nonleaf routine,
loading register $31 is required.
jr scratch

See Also
Reference
MIPS Assembler Macros
Other Resources
MIPS Prolog and Epilog
Smart Device Development

MIPS Assembler Macros


MIPS Assembler Macros
Assembler-level macros isolate the programmer from the details of assembler directives.
The following table shows the macros defined for MIPS microprocessors.
Macro Description
ALTERNATE_ENTRY (MIPS) Declares an alternate entry to a routine

EXCEPTION_HANDLER (MIPS Associates a named exception handler with the subsequent NESTED_ENTRY
)

LEAF_ENTRY (MIPS) Declares the beginning of a routine that does not require any prolog code

NESTED_ENTRY (MIPS) Declares the beginning of a routine that has an existing stack frame or creates a new stack fram
e

PROLOGUE_END Marks the end of the prolog area


See Also
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

ALTERNATE_ENTRY (MIPS)
ALTERNATE_ENTRY (MIPS)
This macro declares an alternate entry to a routine of type NESTED_ENTRY (MIPS) or LEAF_ENTRY (MIPS).

ALTERNATE_ENTRY Name[,
[Section=]SectionName]

Parameters
Name
Name is the entry point and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; see Remarks.
Return Values
None.
Remarks
The ALTERNATE_ENTRY macro does not use the SectionName parameter. The parameter is accepted and ignored for
consistency with NESTED_ENTRY (MIPS) and LEAF_ENTRY (MIPS). If used, an ALTERNATE_ENTRY call must appear in the
body of a routine.
See Also
Reference
NESTED_ENTRY (MIPS)
LEAF_ENTRY (MIPS)
Smart Device Development

EXCEPTION_HANDLER (MIPS)
EXCEPTION_HANDLER (MIPS)
This macro associates an exception handler Handler with a subsequent NESTED_ENTRY (MIPS) or LEAF_ENTRY (MIPS).

EXCEPTION_HANDLER Handler

Parameters
Handler
Name of exception handler.
Return Values
None.
See Also
Reference
NESTED_ENTRY (MIPS)
LEAF_ENTRY (MIPS)
Smart Device Development

LEAF_ENTRY (MIPS)
LEAF_ENTRY (MIPS)
This macro declares the beginning of a routine that does not require any prolog code.

LEAF_ENTRY Name[,[Section=]SectionName]

Parameters
Name
Name is the routine name and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; it is optional and defaults to .text.
Return Values
None.
Remarks
A LEAF_ENTRY must have an associated PROLOGUE_END.
See Also
Reference
NESTED_ENTRY (MIPS)
EXCEPTION_HANDLER (MIPS)
PROLOGUE_END
Smart Device Development

NESTED_ENTRY (MIPS)
NESTED_ENTRY (MIPS)
This macro declares the beginning of a routine that has an existing frame or that creates a stack frame.

NESTED_ENTRY Name[,[Section=]SectionName]

Parameters
Name
Name is the routine name and is in the global name space.
SectionName
SectionName is the name of the section in which the entry will appear; it is optional and defaults to. text.
Return Values
None.
Remarks
A NESTED_ENTRY must have an associated PROLOGUE_END.
See Also
Reference
LEAF_ENTRY (MIPS)
EXCEPTION_HANDLER (MIPS)
PROLOGUE_END
Smart Device Development

PROLOGUE_END
PROLOGUE_END
This macro marks the end of the prolog area for the MIPS microprocessor family.

PROLOGUE_END

Parameters
None.
Return Values
None.
Remarks
This macro must appear following a NESTED_ENTRY (MIPS) or LEAF_ENTRY (MIPS) macro.
See Also
Reference
NESTED_ENTRY (MIPS)
LEAF_ENTRY (MIPS)
Smart Device Development

MIPS Assembler
MIPS Assembler
Support for MIPS-licensed microprocessor includes a standalone assembler, inline assembly, and assembler macros.
In This Section
Stand-alone MIPS Assembler

Provides a brief description of the stand-alone MIPS assembler.


MIPS Inline Assembly Language
Describes the conventions of MIPS inline assembly
Related Sections
MIPS Family Processors

Provides an overview of key functionality, compiler options, and intrinsic functions.


Smart Device Development

Stand-alone MIPS Assembler


Stand-alone MIPS Assembler
The MIPS edition of Visual C++ includes a stand-alone assembler.
The assembler does not have all of the restrictions that inline assembly does; in particular, using the stand-alone assembler is
the only way to create functions written only in assembly code.
However, in some respects the stand-alone assembler is less convenient, because you cannot refer as easily to objects in C and
C++ source code.
MIPS stand-alone assembler driver is Mipsasm.exe. Mipsasm recognizes assembly language source files that end with .asm or
.s file extensions.
The following code example shows how to assemble and link prog.asm into an executable in one step from the command line.

mipsasm -DMIPS -QMmips2 prog.asm /link /entry:mainACRTStartup


/subsystem:windowsce /nodefaultlib corelibc.lib coredll.lib

The next code example shows how to assemble an assembly language source file into an object file without linking, using the
"-c" assembler switch.

mipsasm -DMIPS -QMmips2 -c prog.asm

To see more assembler options, type the following at the command line:

mipsasm /?

See Also
Concepts
MIPS Inline Assembly Language
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

MIPS Inline Assembly Language


MIPS Inline Assembly Language
Inline assembly language allows you to embed assembly-language instructions in your C and C++ source programs without
extra assembly and link steps.
The inline assembler is built into the compiler and does not require separate assembly.
Because the inline assembler requires no extra steps, it is sometimes more convenient than using a separate assembler,
especially in situations where you require access to processor resources.
Inline assembly code disables compiler optimization for the inline assembler function. If optimization is important for your
program, you should consider using intrinsic functions.
To use inline assembly code, you must select the appropriate compiler switches for the specific Instruction Set Architecture
(ISA).
For more information about these switches, see /QMmipsNN - Generate Code for Specific MIPS ISA.
Restrictions
The string specified in the __asm statement can be any valid assembly code accepted by the stand-alone assembler. You can
use any of the pseudo-ops supported, as long as you do not use pseudo-ops to define separate procedures or functions.
To create complete assembly-language procedures, use the stand-alone assembler, as explained in Stand-alone MIPS
Assembler.
See Also
Reference
MIPS Compiler Options
Other Resources
MIPS Calling Sequence Specification
Smart Device Development

_asm Keyword in MIPS Inline Assembly


_asm Keyword in MIPS Inline Assembly
The _asm keyword invokes the inline assembler, and can appear anywhere in a C or C++ statement. The compiler treats the
_asm statement as an intrinsic function call. You must include a #pragma intrinsic statement that declares an _asm keyword.
The following C++ code shows how to declare _asm with a #pragma directive.

extern "C" {
void _asm (char*,...);
};
#pragma intrinsic (__asm)

It is not necessary to perform these declarations in C source modules.


In an _asm declaration, the string argument is a null terminated character string consisting of one or more assembly language
statements. The compiler passes any subsequent arguments to the assembly code described by the first string argument.
The following example generates instructions to multiply 4 and 5, and store the result in the t0 register. In this example, the
reference to %0 refers the value "4" to the first argument in the generated assembly code. %1 refers the value "5" to the
second argument in the generated assembly code.

__asm("mul t0, %0, %1", 4, 5);

Within the string argument of the _asm prototype, an embedded semicolon (;) or newline (\n) is used to separate multiple
assembly language statements. The following example shows how to use a semicolon to signify multiple assembly language
statements.

__asm(".set noat;"
"mult $1, $4, $5; "
".set at ");

Loading function addresses with inline assembly


The MIPS inline assembler uses the pseudo-op la to load the address of a function to a register. When compiling with /Og
(Global Optimizations), this causes the compiler to generate the following error message:

Error C2759: inline assember reports function literal used with call optimization

If you want to compile your code with /Og (Global Optimizations), you will need to replace the la pseudo-op with with other
constructions that do not cause a compiler error.
The following code example shows such a replacement.
Replace this code construction
__asm("la v0, f");

with the following code construction:


__asm("move v0,%0", f);

See Also
Concepts
MIPS Inline Assembly Language
Smart Device Development

MIPS _asm Statement Registers


MIPS _asm Statement Registers
The following table gives MIPS macro names and associated register descriptions.
MIPS16 macro na MIPSII macro na Associated Regist Description
me me er
zero zero $0 Always zero; writes to this register are ignored.

N/A AT $1 Assembler temporary.

v0 v0 $2 Used to hold return value.

v1 v1 $3 Used to hold return value.

a0 a0 $4 Argument registers; used to pass first four words of integer argu


ments.

a1 a1 $5 Argument registers; used to pass first four words of integer argu


ments.

a2 a2 $6 Argument registers; used to pass first four words of integer argu


ments.

a3 a3 $7 Argument registers; used to pass first four words of integer argu


ments.

N/A t0 $8 Temporary registers; may be freely changed.

N/A t1 $9 Temporary registers; may be freely changed.

N/A t2 $10 Temporary registers; may be freely changed.

N/A t3 $11 Temporary registers; may be freely changed.

N/A t4 $12 Temporary registers; may be freely changed.

N/A t5 $13 Temporary registers; may be freely changed.

N/A t6 $14 Temporary registers; may be freely changed.

N/A t7 $15 Temporary registers; may be freely changed.

N/A s0 $16 Saved registers; must be preserved across function calls.

N/A s1 $17 Saved registers; must be preserved across function calls.

N/A s2 $18 Saved registers; must be preserved across function calls.

N/A s3 $19 Saved registers; must be preserved across function calls.

N/A s4 $20 Saved registers; must be preserved across function calls.


N/A s5 $21 Saved registers; must be preserved across function calls.

N/A s6 $22 Saved registers; must be preserved across function calls.

N/A s7 $23 Saved registers; must be preserved across function calls.

t8 t8 $24 Additional temporary registers.

N/A t9 $25 Additional temporary registers.

N/A k0 $26 Kernel reserved registers.

N/A k1 $27 Kernel reserved registers.

N/A gp $28 Global pointer.

sp sp $29 Stack pointer.

N/A s8 $30 Additional saved register.

ra ra $31 Return address register.

The register macro names are interchangeable with their numeric names using a dollar sign prefix. For example, the following
two statements are equivalent:

__asm("add v0, a0, $16");


__asm("add $2, $4, s0");

See Also
Concepts
_asm Keyword in MIPS Inline Assembly
Smart Device Development

MIPS Assembler Error Messages


MIPS Assembler Error Messages
This section contains descriptions of the MIPS Assembler error messages.
In This Section
MIPS Error Messages 1-525
MIPS Error Messages 526-610
MIPS Error Messages 611-660
MIPS Error Messages 661-910
MIPS Error Messages 911-980
Smart Device Development

MIPS Error Messages 1-525


MIPS Error Messages 1-525
The following table shows MIPS error messages number 1 through 525.
No. Severity Message text
1 FATAL INTERNAL ASSEMBLER ERROR (assembler file '%s', line %d)

1 ERROR INTERNAL ASSEMBLER ERROR (assembler file '%s', line %d)

2 FATAL Assembler is out of heap space

3 FATAL INTERNAL ASSEMBLER ERROR: Insufficient memory (assembler file '%s', line %d)

6 FATAL Invalid error number: %s(%d, ...)

8 FATAL No input file specified

9 FATAL Image file '%Fs' is not a PE image file

10 FATAL Invalid Coff object '%Fs': swapped magic = 0x%4x

12 FATAL Symbol '%Fs' not found during disassembly of '%Fs'

13 FATAL Invalid EOF reading file '%Fs'

15 WARN Unable to reach line number %d of file '%Fs'

18 WARN Line number %d is greater than maximum of %d for file '%Fs

20 ERROR Local label number is out of range

32 FATAL %s (%d): WIN32 '%s' failed; %s

32 WARN %s (%d): WIN32 '%s' failed; %s

63 FATAL Unknown option '%c' in '%s'

83 FATAL Cannot open %Fs file: '%Fs': %Fs

83 WARN Cannot open %Fs file: '%Fs': %Fs

83 ERROR Cannot open %Fs file: '%Fs': %Fs

84 WARN Cannot read %Fs file: '%Fs': %Fs

84 ERROR Cannot read %Fs file: '%Fs': %Fs

85 FATAL Cannot write %Fs file: '%Fs': %Fs

110 ERROR Warnings treated as error - no object file generated


112 FATAL Cannot unlink %Fs file: '%Fs': %Fs

120 FATAL Product ID mismatch between '%s' version '%ld' and '%s' version '%ld'

213 ERROR Invalid numerical argument '%s'

213 FATAL Invalid numerical argument '%s'

418 ERROR Extended-precision floating point not supported

502 FATAL %s (%d): Unexpected opcode '%d'

503 FATAL %s (%d): .ent or .aent not aligned on word boundary

504 FATAL %s (%d): tried to unput over buffer boundary

505 FATAL %s (%d): not expecting arg size of %d

506 ERROR Obsolete or corrupt binasm '%s'

507 FATAL Exceeded 64k relocation entries. Recompile with /Gy

508 ERROR Illegal branch-label '%s' reference at line (%d): branch and label are in different sections

511 ERROR Redefinition of symbol '%s'

512 ERROR .repeat only valid in assembler

513 ERROR .endr only valid in assembler

514 INFO Unsupported option type (%d) in binasm

515 ERROR .noalias and .alias require gp registers

516 ERROR .cpload must be inside noreorder

517 ERROR .half not on halfword boundary

518 ERROR .word not on word boundary

519 ERROR .dword not on double-word boundary

520 ERROR .float or .double not on double-word boundary

521 WARN NOP required for mtc0/mfc0

522 ERROR Both .cpalias and .cprestore used in the same .ent/.end pair

523 ERROR .cpalias registers do not match between .ent/.end pair

524 ERROR .cprestore offsets do not match between .ent/.end pair

525 ERROR .cprestore or .cpalias can only be placed in text


See Also
Reference
MIPS Error Messages 526-610
MIPS Error Messages 611-660
MIPS Error Messages 661-910
MIPS Error Messages 911-980
Other Resources
MIPS Family Processors
Smart Device Development

MIPS Error Messages 526-610


MIPS Error Messages 526-610
The following table shows MIPS error messages number 526 through 610.
No. Severity Message text
526 ERROR Code can only be placed in text

527 ERROR Bad instruction opcode

528 INFO Preparing gp-tables

529 INFO Building gp-tables

530 ERROR Label referenced but not defined: %s

531 ERROR Not all branch-label symbols were defined

532 ERROR C0 opcode must be inside .set noreorder section

533 ERROR Byte address of jump target must fit in 28 bits

534 ERROR Jump target is not word-aligned

536 ERROR Register must differ from base

537 ERROR Operand 1 should be fp reg

538 ERROR ulwu instruction not implemented

539 ERROR coproc doubles not implemented

540 ERROR li.e instruction not implemented

542 ERROR Exponent out of range: %s

543 ERROR Only \\""1\\"" or \\""0\\"" allowed left of binary point: %s

544 ERROR Illegally denormalized fraction: %s

545 ERROR Floating point underflow: %s

546 ERROR -M forbidden when assembler runs on a MIPS machine

547 ERROR -M does not support \\"".extended\\""

548 ERROR -M does not support hex floating point

549 ERROR Floating point literal too long

550 ERROR Too many float literals — compile with \\""-Wb,-nopool\\""
551 ERROR Cannot label a pseudo-op in text section

552 ERROR Shift amount not 0..31

553 ERROR Shift amount not 0..63

554 ERROR gp-relative segments together exceed 64k bytes: %d bytes

558 ERROR MIPS16 move must use a MIPSII gp register

559 ERROR MIPS16 addiu immediate limited to 15 bits

560 ERROR Doubleword opcode not supported by mips2 or earlier

575 ERROR MIPS16 load with symbolic offset must use different base & dest

576 ERROR MIPS16 store may not use symbolic offset in base-offset mode

577 ERROR Non-MIPS16 instruction used in MIPS16 text section

578 ERROR MIPS16 instruction used in non-MIPS16 text section

579 ERROR 2nd register invalid in MIPS16 dsrl and dsra

580 ERROR Branch offset not specified

581 ERROR Relative offset not multiple of 4

582 ERROR Relative offset beyond 32768

583 ERROR cprestore offset must be positive and divisible by 4

584 ERROR .cpalias requires a register argument

585 ERROR Number out of range: %s

586 ERROR MIPS16 general purpose register expected

587 ERROR 2-register MIPS16 jalr must take $ra as first operand

602 ERROR Assembler op/directive expected

603 ERROR Undefined symbol in expression

604 ERROR Invalid symbol in expression: %s

605 ERROR Symbol must have absolute value: %s

607 ERROR No such label

608 ERROR Too many local labels

609 ERROR Overflow


610 WARN Large decimal set sign bit
See Also
Reference
MIPS Error Messages 1-525
MIPS Error Messages 611-660
MIPS Error Messages 661-910
MIPS Error Messages 911-980
Other Resources
MIPS Family Processors
Smart Device Development

MIPS Error Messages 611-660


MIPS Error Messages 611-660
The following table shows MIPS error messages number 611 through 660.
No. Severity Message text
611 ERROR Badly delimited numeric literal

612 ERROR Badly delimited hexadecimal literal

613 ERROR Hex digit in decimal literal

614 ERROR Hex floating point literal too long

615 ERROR Missing exponent in floating-point literal

616 ERROR Truncating token

618 ERROR Literal string not terminated

619 ERROR Literal string too long

620 ERROR Number in string too large

621 ERROR Missing \\"" at end of string

622 ERROR Expected cpp-generated line number

623 ERROR Expected cpp-generated file name

624 WARN Truncating cpp-generated filename

625 ERROR Section not declared for symbol '%s'

626 ERROR Address symbol expected

627 ERROR Register expected

628 ERROR Undefined symbol '%s'

629 ERROR ')' expected: %s

630 ERROR String within expression may have only one character: %s

631 ERROR Immediate value out of range

632 ERROR Conflicting definition of symbol '%s'

633 ERROR Should be gp register

634 ERROR Should be even gp register


635 ERROR Should be coprocessor register

636 ERROR Should be even coprocessor register

637 ERROR Should be floating point register

638 ERROR Should be even floating point register

639 ERROR Should be multiple-of-2 register

640 ERROR Should be multiple-of-4 register

641 ERROR Should be multiple-of-4 floating point register

642 ERROR Should be fp double or gp single register

643 INFO No global in text_localize(%d) '%s'

644 ERROR Expression required

645 ERROR Break operand out of range

646 ERROR Ill-formed symbolic expression

647 ERROR Bad id in expression

648 ERROR Anticipating a string for .dword's value

649 ERROR Invalid memory tag

650 FATAL %s (%d): .text name mismatch, '%s' : '%s'

651 ERROR Invalid external expression

652 ERROR Cache operation has invalid value

653 ERROR Floating point constant expected

654 ERROR 2nd register not allowed in non-mips3 architecture

655 ERROR lui expression not in to 65535 range

656 ERROR Invalid syntax in statement

657 ERROR Shift value not 0 to 31 (inclusive)

658 ERROR Shift value not 0 to 63 (inclusive)

659 ERROR Operation requires immediate operand

660 ERROR Immediate operand not 0 to 65535


See Also
Reference
MIPS Error Messages 1-525
MIPS Error Messages 526-610
MIPS Error Messages 661-910
MIPS Error Messages 911-980
Other Resources
MIPS Family Processors
Smart Device Development

MIPS Error Messages 661-910


MIPS Error Messages 661-910
The following table shows MIPS error messages number 661 through 910.
No. Severity Message text
661 ERROR Immediate operand not -32768 to 32767

662 ERROR Immediate operand not allowed on fp

663 ERROR Statement extends past logical end

664 ERROR Should be floating point CC reg

665 ERROR Invalid symbol for address

666 ERROR Label expected

667 ERROR Symbol is not a label

668 ERROR Label or number expected

669 ERROR Cannot find symbol

670 ERROR .shift_addr expression not 1

671 ERROR .align expression not to 12

672 ERROR String literal expected

673 ERROR Byte value must be -128 to 255

674 ERROR Identifier expected

675 ERROR Number expected

676 ERROR Invalid symbol for .comm/.lcomm/.extern

677 ERROR Undefined assembler operation

678 ERROR .err directive encountered

680 ERROR Invalid symbol for .[a]ent: %s

681 ERROR Invalid symbol for .globl: %s

682 ERROR Invalid section name: %s

683 ERROR Invalid id in expression

684 ERROR Value must be -32768 to 65535


685 ERROR .repeat not allowed in struct

686 ERROR .repeat may not nest

687 ERROR .endr without preceding .repeat

688 ERROR Reserved name used as label

689 ERROR Colon must follow a local label

690 ERROR Malformed statement

691 ERROR %hi/%lo/%gprel not followed by (

692 WARN Invalid expression with %hi/%lo: %s

693 ERROR Expected \\""(\\"" before base register

694 ERROR Expected \\"")\\"" after base register

695 ERROR Macro expansion needs at register after .set noat

696 ERROR Code field in trap instruction not 0..1023

697 ERROR += expected after .

698 ERROR .text block missing .ent

699 ERROR .end without matching .ent

897 WARN Opcode used without -QMmips64 or -QMViper

898 WARN MIPSII opcode used without -QMmips32

899 WARN Opcode used without -QMmips32 or -QMmips4

900 WARN Opcode used without -QMmips32 or -QMmips64 or -QMViper

901 ERROR Shift value not 32 to 63 (inclusive)

905 ERROR Should be vector

906 ERROR Should be debug reg

907 WARN MIPS V opcode used without -QMmips5

908 WARN Mips viper opcode used without -QMViper

909 WARN Mips R5400 opcode used without -QMR5400

910 WARN Using unimplemented unaligned-access opcode


See Also
Reference
MIPS Error Messages 1-525
MIPS Error Messages 526-610
MIPS Error Messages 611-660
MIPS Error Messages 911-980
Other Resources
MIPS Family Processors
Smart Device Development

MIPS Error Messages 911-980


MIPS Error Messages 911-980
The following table shows MIPS error messages number 911 through 980.
N Seve Message text
o. rity
9 WAR Zero length string
1 N
1

9 WAR Register alu instruction converted to immediate instruction


1 N
2

9 WAR opcode used without /QMRnnnn where nnnn=3900, 32, or 64


1 N
6

9 WAR Floating point opcode used with -QMFPE


1 N
7

9 WAR Mark II opcode not available on R4100 used with -QMR4100


1 N
8

9 WAR Mark II opcode not available on all Windows CE architectures


1 N
9

9 WAR Mark II opcode not available on R3910 used with -QMR3910


2 N
0

9 WAR Mips R4100 opcode used without -QMR4100


2 N
2

9 WAR wait instruction used without /QMmips32, /QMmips64, or /QMViper


2 N
3

9 WAR INTERNAL COMPILER WARNING - Invalid version stamp Please choose the Technical Support command on the Visual
2 N C++ Help menu, or open the Technical Support help file for more information
4

9 WAR Length of .lcomm was less than 1: %s


2 N
6

9 WAR Errata 52: DIV in branch delay slot may not work on a R4000 chip
2 N
7
9 WAR Division by zero
2 N
8

9 WAR Cross-assembler ignores -fli


2 N
9

9 WAR Decimal .extended limited to 55 bit precision: %s


3 N
0

9 WAR Floating under/over-flow in conversion to binary


3 N
1

9 WAR Floating exception in conversion to binary


3 N
2

9 WAR Floating exception in conversion to binary


3 N
2

9 WAR Cannot correct .e alignment


3 N
3

9 WAR Cannot do floating-point load on unaligned data


3 N
4

9 WAR Improperly aligned register


3 N
5

9 WAR sData offset exceeded $gp padding threshold


3 N
6

9 WAR Extern offset exceeded $gp padding threshold


3 N
7

9 WAR Bss offset exceeded $gp padding threshold


3 N
8

9 WAR Branch target is not word-aligned


3 N
9

9 WAR Mark II opcode used without -QMmips2


4 N
0
9 WAR Mark III opcode used without -QMmips3
4 N
1

9 WAR MIPS IV opcode used without -QMmips4


4 N
2

9 WAR Too many file names '%s'


4 N
3

9 WAR Unknown option '%s'


4 N
4

9 WAR Macro instruction used


4 N
5

9 WAR Macro instruction used in branch delay slot


4 N
6

9 WAR .set nomove is obsolete


4 N
7

9 WAR nomacro requires noreorder


4 N
8

9 WAR reorder requires macro


4 N
9

9 WAR No code generated for '%Fs'


5 N
0

9 WAR .loc should precede .ent for /Od


5 N
1

9 ERR Cannot handle misaligned 64 bit const


5 OR
2

9 WAR nop must be inside .set noreorder section


5 N
3

9 WAR Macro instruction used t


5 N
4
9 WAR Symbol %s is not in comdat section yet it has the comdat attribute
5 N
6

9 WAR Image file '%Fs' has unfamiliar optional header size %d


6 N
4

9 ERR duplicate public symbol '%s' defined for COMDAT '%s' (-Gy), linked image may not run
7 OR
2

9 WAR duplicate public symbol '%s' defined for COMDAT '%s' (-Gy), linked image may not run
7 N
2

9 WAR Directive not implemented


7 N
5

9 WAR $31 not allowed in conditional branch and link


7 N
6

9 ERR Coprocessor operation > 25 bits


7 OR
7

9 WAR Extra filename on command line


7 N
8

9 WAR Line too long


7 N
9

9 WAR Used t without .set noat


8 N
0

9 War Cannot redefine symbol


8 n
1

9 War Load/store of an undefined symbol: %s


8 n
2

9 War JAL should not use same register twice


8 n
3

9 War JAL should not use $31 alone or any register twice
8 n
4
9 War Optional argument not S, ignored
8 n
5

9 War .option name expected


8 n
6

9 War .ent missing preceding .end


8 n
7
9 War .end missing at end of assembly
8 n
8

9 Error .ent/.end block never defined the procedure name


8
9

9 War .aent must be inside .ent/.end block


9 n
0

9 War sym directive not implemented


9 n
1

9 War .line directive not implemented


9 n
2

9 War .dead directive not implemented


9 n
3

9 War Unknown name in .option


9 n
4

9 War .set option expected


9 n
5

9 War Unknown option in .set


9 n
6

9 War Hint field not in range 0..31


9 n
7

9 War Multiply accumulate instruction used without /QMRnnnn - Optimize for Specific MIPS chip, where nnnn = 4121, Viper
9 n , 5400, 32, or 64.
8
See Also
Reference
MIPS Error Messages 1-525
MIPS Error Messages 526-610
MIPS Error Messages 611-660
MIPS Error Messages 661-910
Other Resources
MIPS Family Processors
Desarrollo para Smart Device

Referencia de la interfaz de usuario para dispositivos


La mayoría de las características de la interfaz de usuario de Visual Studio son las mismas cuando se diseña para equipos de
escritorio y para dispositivos. Es posible encontrar información relacionada en los temas de la Ayuda en Elementos generales
de la interfaz de usuario (Visual Studio).
Los temas de esta sección describen elementos de la interfaz creados exclusivamente para el desarrollo de aplicaciones de
dispositivos.
En esta sección
Comunes a todos los proyectos de dispositivos
Configurar programa previo de emulación (Cuadro de diálogo)
Configurar transporte TCP/IP (Cuadro de diálogo)
Conectar con dispositivo (Cuadro de diálogo)
Implementar (Cuadro de diálogo, Dispositivos)
Propiedades de dispositivo (Cuadro de diálogo)
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Seleccionar certificado (Cuadro de diálogo, Dispositivos)
Proyectos de dispositivos administrados
Cambiar plataforma de destino (Cuadro de diálogo, Dispositivos)
Conectar con <base de datos> (Cuadro de diálogo)
Propiedad Cadena de conexión, cuadro de diálogo Propiedades de archivo (Dispositivos)
Panel Depuración, Diseñador de proyectos
Definir color (Cuadro de diálogo, Dispositivos)
Controles de dispositivo (Ficha), Cuadro de herramientas
Panel de dispositivos, Diseñador de proyectos
Editor de fuentes (Cuadro de diálogo, Dispositivos)
Propiedades de factor de forma (Cuadro de diálogo, Dispositivos)
Factores de forma, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
General, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Carpeta de archivo de resultados (Cuadro de diálogo, Dispositivos)
Propiedades (Ventana), Proyectos administrados de Smart Device
Proyectos de dispositivos nativos
Características avanzadas, Asistente para aplicaciones de Smart Device MFC
Configuración de la aplicación, Asistente para proyectos ATL para Smart Devices
Configuración de la aplicación, Asistente para controles ActiveX de Smart Device MFC
Configuración de la aplicación, Asistente para archivos DLL de Smart Device MFC
Configuración de la aplicación, Asistente para proyectos Win32 para Smart Device
Tipo de aplicación, Asistente para aplicaciones de Smart Device MFC
Asistente para proyectos ATL de Smart Device
Nombres del control, Asistente para controles ActiveX de Smart Device MFC
Configuración del control, Asistente para controles ActiveX de Smart Device MFC
Depurar, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo, Dispositivos)
Implementación, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo,
Dispositivos)
Cadenas de plantillas de documentos, Asistente para aplicaciones de Smart Device MFC
General, Firmar con Authenticode, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro
de diálogo, Dispositivos)
Clases generadas, Asistente para aplicaciones de Smart Device MFC
Asistente para controles ActiveX de Smart Device MFC
Asistente para aplicaciones de Smart Device MFC
Asistente para archivos DLL de Smart Device MFC
Plataformas, Asistente para proyectos ATL de Smart Device
Plataformas, Asistente para controles ActiveX de Smart Device MFC
Plataformas, Asistente para aplicaciones de Smart Device MFC
Plataformas, Asistente para archivos DLL de Smart Device MFC
Plataformas, Asistente para proyectos Win32 para Smart Device
Características de la interfaz de usuario, Asistente para aplicaciones de Smart Device MFC
Asistente para proyectos Win32 para Smart Device
Proyectos de instalación de dispositivos
Generar, Propiedades de configuración, Propiedades del proyecto de implementación (Cuadro de diálogo)
Implementación, Propiedades de configuración, Páginas de propiedades de <nombreDeProyecto> (Cuadro de diálogo,
Dispositivos)
Propiedades (Ventana), Proyecto Cab de Smart Device
Secciones relacionadas
Elementos generales de la interfaz de usuario (Visual Studio)
Explica las opciones que aparecen en las ventanas y cuadros de diálogo de Visual Studio.
Desarrollo para Smart Device

Agregar/Modificar conexión (Dispositivos)


Este tema se ha actualizado para SP1 de Visual Studio 2005.
Especifica un origen y un proveedor de datos y proporciona un medio de probar la conexión.
La tabla siguiente se ha actualizado para SP1 de Visual Studio 2005.
Elemento Descripción
Cuadro Origen de d Especifica el origen de datos y el proveedor de datos.
atos

Cambiar Abre el cuadro de diálogo Cambiar origen de datos, donde puede seleccionar un origen de datos y un
proveedor de datos.

Botones de opción O Especifica si el origen de datos se encuentra en el equipo de desarrollo o en un dispositivo conectado por
rigen de datos ActiveSync.

Base de datos Especifica el nombre de archivo de la base de datos.

Crear Abre el cuadro de diálogo Crear nueva base de datos, donde puede especificar un nombre de archivo y
una contraseña para la nueva base de datos.

Examinar Abre el cuadro de diálogo Seleccionar archivo de base de datos, donde puede seleccionar una base d
e datos de SQL Server Mobile Edition o SQL Server Compact Edition existente.

Contraseña Especifica la contraseña para la base de datos

Avanzadas Abre el cuadro de diálogo Propiedades avanzadas, donde puede modificar el nombre y ruta de acceso
del archivo de base de datos y especificar una contraseña.

Probar conexión Prueba la conexión a la base de datos especificada en el cuadro Base de datos.

Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Características avanzadas, Asistente para aplicaciones de Smart


Device MFC
Describe la página Características avanzadas del Asistente para aplicaciones de Smart Device MFC.
Esta página proporciona opciones para las características adicionales para su aplicación, como controles ActiveX y sockets de
Windows. En cada sección, especifique compatibilidad adicional para estas características avanzadas.
Características avanzadas
Ayuda de Windows
Esta característica no se admite en esta versión.
Impresión y vista preliminar
Esta característica no se admite en esta versión.
Genera el código necesario para controlar los comandos de impresión, configuración de la impresora y vista preliminar
mediante llamadas a funciones miembro de la clase CView de la biblioteca MFC. El asistente también agrega comandos para
estas funciones al menú de la aplicación. La compatibilidad con la impresión sólo está disponible para aplicaciones que
especifiquen Compatibilidad con la arquitectura documento/vista en la página Tipo de aplicación del asistente. De
manera predeterminada, las aplicaciones de documento/vista son compatibles con la impresión.
Controles ActiveX
Ofrece compatibilidad con controles ActiveX (de forma predeterminada). Si no selecciona esta opción y posteriormente
desea insertar controles ActiveX en el proyecto, deberá agregar una llamada a AfxEnableControlContainer a la función
miembro InitInstance de la aplicación.
Windows sockets
Esta característica no se admite en esta versión.
Ofrece compatibilidad con los sockets de Windows. Los sockets de Windows permiten programar aplicaciones que pueden
comunicarse a través de redes TCP/IP.
Número de archivos en la lista de archivos recientes
Esta característica no se admite en esta versión.
Especifica el número de archivos que se mostrarán en la lista de archivos utilizados recientemente. El número
predeterminado es 4.
Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Configuración de la aplicación, Asistente para proyectos ATL


para Smart Devices
Especifica la configuración que no es de la plataforma del nuevo proyecto ATL para Smart Device.
Nota
Cuando se ejecutan asistentes para código en proyectos para Smart Device, no se puede seleccionar la opción 'Con atributos'
. Esta versión no admite código con atributos en proyectos para Smart Device.

Tipo de servidor
Biblioteca de vínculos dinámicos (DLL)
Especifica que el servidor es una biblioteca de vínculos dinámicos (DLL) y, por tanto, un servidor en proceso.
Ejecutable (EXE)
Especifica que el servidor es un ejecutable (EXE) y, por tanto, un servidor local fuera de proceso. Esta opción no proporciona
compatibilidad con MFC.
Opciones adicionales
Admitir MFC
Especifica que el servidor incluye compatibilidad con MFC. Esta opción vincula el proyecto a las bibliotecas MFC de forma
que pueda tener acceso a cualquiera de las clases y funciones que contienen.
Seleccione esta opción sólo si necesita utilizar clases específicas de MFC en su proyecto. Las clases de utilidad como CString,
CRect Class, CSize Class y CPoint Class no necesitan que se agregue compatibilidad MFC al proyecto ATL en cuestión.
Si elige esta opción, debe agregar la línea siguiente al principio de cada método COM, procedimiento de ventanas y función
exportada que utilice MFC:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

Admitir combinación de proxy y código auxiliar


Habilita el servidor proxy y el código auxiliar generados por MIDL, normalmente para aquellos SDK que utilizan DCOM. La
opción no está disponible para las plataformas que no lo admiten, incluidas Pocket PC y Smartphone.
Vea también
Referencia
Asistente para proyectos ATL de Smart Device
Otros recursos
Referencia a ATL para dispositivos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Configuración de la aplicación, Asistente para controles


ActiveX de Smart Device MFC
Describe la página Configuración de la aplicación del Asistente para controles ActiveX de Smart Device MFC.
Utilice esta página del Asistente para aplicaciones de Smart Device MFC para diseñar y agregar características básicas a un
nuevo proyecto ActiveX de Smart Device MFC. Esta configuración sólo se aplica a la aplicación misma, no a características o
elementos específicos del control.
Configuración de la aplicación
Licencia en tiempo de ejecución
Active esta opción para generar un archivo de licencia de usuario, que se distribuirá con el control. La licencia es un archivo
de texto, projname.lic. Este archivo debe estar en el mismo directorio que el archivo DLL del control para permitir la creación
de una instancia del control en un entorno en tiempo de diseño. Normalmente distribuirá este archivo con el control, pero
los clientes no lo distribuirán.
Vea también
Referencia
Asistente para controles ActiveX de Smart Device MFC
Desarrollo para Smart Device

Configuración de la aplicación, Asistente para archivos DLL de


Smart Device MFC
Describe la página Configuración de la aplicación del Asistente para archivos DLL de Smart Device MFC.
Utilice esta página del Asistente para archivos DLL de Smart Device MFC para diseñar y agregar características básicas a un
nuevo proyecto DLL de Smart Device.
Tipo de archivo DLL
Seleccione el tipo de archivo DLL MFC para Smart Device que desee crear.
Archivo DLL estándar que utiliza el archivo DLL compartido de MFC
Seleccione esta opción para vincular la biblioteca MFC al programa como un archivo DLL compartido. Con esta opción, no
puede compartir objetos MFC entre el archivo DLL y la aplicación que llama. El programa hace llamadas a la biblioteca MFC
en tiempo de ejecución. Esta opción reduce los requisitos de disco y memoria del programa si éste está formado por varios
archivos ejecutables que utilizan la biblioteca MFC. Los programas de Windows CE y de MFC pueden llamar a las funciones
de su archivo DLL. Debe redistribuir el archivo DLL de MFC con este tipo de proyecto.
Archivo DLL estándar con MFC vinculada estáticamente
Seleccione esta opción para vincular estáticamente el programa a la biblioteca MFC en tiempo de generación. Los programas
de Windows CE y de MFC pueden llamar a las funciones de su archivo DLL. Aunque esta opción aumenta el tamaño del
programa, no tiene que redistribuir el archivo DLL de MFC con este tipo de proyecto. No puede compartir objetos MFC entre
el archivo DLL y la aplicación que llama.
Archivo DLL de extensión de MFC
Seleccione esta opción si desea que el programa realice llamadas a la biblioteca MFC en tiempo de ejecución y si desea
compartir objetos MFC entre el archivo DLL y la aplicación que llama. Esta opción reduce los requisitos de disco y memoria
del programa si éste está compuesto de varios archivos ejecutables que utilizan la biblioteca MFC. Sólo los programas MFC
podrán llamar a las funciones del archivo DLL. Debe redistribuir el archivo DLL de MFC con este tipo de proyecto.
Características adicionales
Puede elegir que el archivo DLL de MFC sea o no compatible con la automatización o con Windows sockets.
Automatización
Seleccione Automatización para permitir al programa manipular objetos implementados en otro programa. Al seleccionar
Automatización también expone el programa a otros clientes de automatización. Vea Automation para obtener más
información.
Windows sockets
Seleccione esta opción para indicar que el programa es compatible con Windows sockets. Windows sockets permite escribir
programas que se comuniquen a través de redes TCP/IP. Cuando se crea el archivo DLL de MFC con compatibilidad con
Windows sockets, CWinApp::InitInstance inicializa dicha compatibilidad con los sockets y el archivo de encabezado MFC
StdAfx.h incluye AfxSock.h.
Vea también
Referencia
Asistente para archivos DLL de Smart Device MFC
Desarrollo para Smart Device

Configuración de la aplicación, Asistente para proyectos Win32


para Smart Device
Utilice esta página del asistente para establecer opciones en el proyecto Windows CE.
Tipo de aplicación
Crea el tipo de aplicación especificado.
Opción Description
Aplicaci Crea una aplicación ejecutable (.exe) escrita en Visual C o Visual C++ mediante llamadas a la API de Windows CE p
ón para ara crear una interfaz gráfica de usuario.
Window
s

Aplicaci Crea la arquitectura de aplicación de la consola para una determinada aplicación. Esta opción sólo está disponible
ón de co para plataformas que admiten aplicaciones de la consola.
nsola

Archivo Crea un archivo binario (DLL) escrito en Visual C o Visual C++ que utiliza llamadas a la API de Windows CE en lug
DLL ar de a las clases MFC. Actúa como una biblioteca de funciones compartida que varias aplicaciones pueden utilizar
simultáneamente. Puede indicar que la DLL exporta símbolos.

Bibliote Crea un archivo que contiene objetos (con sus funciones y datos) que se vincula al programa cuando se genera el
ca estáti archivo ejecutable. Puede vincular una biblioteca estática a un programa basado en MFC o a un programa que no
ca esté basado en MFC. No puede agregar la compatibilidad con ATL a un proyecto de biblioteca estática.

Opciones adicionales
Permite definir las compatibilidades y las opciones de la aplicación, en función de su tipo.
Opció Description
n
Proyec Especifica que los archivos de proyecto están en blanco. Si no tiene un conjunto de archivos de código fuente (como
to vací archivos .cpp, archivos de encabezado, iconos, barras de herramientas o cuadros de diálogo) y desea crear un proye
o cto en el entorno de desarrollo de Visual C++, primero deberá crear un proyecto vacío y después agregar los archiv
os al proyecto. Esta selección no está disponible para proyectos de biblioteca estática.

Export Especifica que un archivo de proyecto DLL exporta símbolos.


ar sím
bolos

Encab Especifica que un proyecto de biblioteca estática utiliza un encabezado precompilado.


ezado
preco
mpila
do

Agregar compatibilidad para


Permite agregar compatibilidad con una de las bibliotecas suministradas en Visual C++.
Opci Description
ón
ATL Genera en el proyecto compatibilidad con las clases ATL (Active Template Library) para dispositivos. Esta opción no est
á disponible para los proyectos de biblioteca estática.
MFC Genera en el proyecto compatibilidad con la biblioteca MFC (Microsoft Foundation Class) para dispositivos.

Vea también
Referencia
Asistente para proyectos Win32 para Smart Device
Desarrollo para Smart Device

Tipo de aplicación, Asistente para aplicaciones de Smart Device


MFC
Utilice esta página del Asistente para aplicaciones de Smart Device MFC para diseñar y agregar características básicas a un
nuevo proyecto para dispositivos inteligentes MFC.
Tipo de aplicación
Indique el tipo de compatibilidad con documentos que desea crear en la aplicación. El tipo de aplicación que seleccione
determina las opciones de interfaz de usuario disponibles para la aplicación. Para obtener más información sobre las
opciones de la interfaz de usuario, vea Características de la interfaz de usuario, Asistente para aplicaciones de Smart Device
MFC. Para obtener más información acerca de los tipos de documentos, vea:
SDI and MDI
Frame Windows
Frame-Window Classes
Documents, Views, and the Framework
Dialog Boxes
Option Description
Documento Crea una arquitectura de interfaz de un único documento para la aplicación, con una clase de vista basada en C
único View. Puede cambiar la clase base para la vista en la página Clases generadas del asistente. Para crear una apli
cación basada en formularios, por ejemplo, puede utilizar CFormView como clase de vista.
En este tipo de aplicación, la ventana de marco del documento sólo puede contener un documento en el marco
.

Basada en c Crea una arquitectura basada en cuadros de diálogo para la aplicación, con una clase de cuadro de diálogo bas
uadros de d ada en CDialog.
iálogo

Documento Crea una arquitectura de documento único para la aplicación, basada en CDocList (Clase). Esta opción sólo está
único con li disponible para plataformas que admiten esta clase, como Pocket PC.
sta de doc
Nota
CdocList no está disponible en este lanzamiento.

Compatibilidad con la arquitectura documento/vista


Incluye la arquitectura documento/vista de la aplicación mediante las clases base CDocument Class y CView Class
(predeterminadas). Desactive esta casilla de verificación si está adaptando una aplicación que no está basada en MFC, por
ejemplo, o si desea reducir el tamaño del archivo ejecutable compilado. Una aplicación sin la arquitectura documento/vista
se deriva de forma predeterminada de CWinApp Class y no incluye compatibilidad con MFC para abrir un documento a
partir de un archivo de disco.
Idioma de los recursos
Establece el idioma que se debe utilizar en los recursos. La lista muestra los idiomas disponibles en el sistema, instalados por
Visual Studio. Si desea seleccionar un idioma distinto del idioma del sistema, deberá estar instalada la carpeta de plantillas
apropiada para ese idioma. Para obtener más información sobre cómo instalar recursos de idiomas distintos de los
predeterminados disponibles en la lista Idioma de los recursos, vea Compatibilidad del asistente con otros idiomas. El
idioma que seleccione quedará reflejado en la opción Cadenas traducidas de la página Cadenas de plantillas de
documentos del asistente.
Uso de MFC
Indica la forma de vincular a la biblioteca MFC. De forma predeterminada, MFC se vincula como un archivo DLL compartido.
Option Description
Utilizar MF Vincula la biblioteca MFC a la aplicación como un archivo DLL compartido. La aplicación hace llamadas a la bib
C en un arc lioteca MFC en tiempo de ejecución. Esta opción reduce los requisitos de disco y memoria de la aplicación si és
hivo DLL co ta está formada por varios archivos ejecutables que utilizan la biblioteca MFC. Las aplicaciones para Windows
mpartido CE y de MFC pueden llamar a las funciones de su archivo DLL.

Utilizar MF Vincula la aplicación a la biblioteca MFC en tiempo de generación.


C en una bi
blioteca est
ática

Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Asistente para proyectos ATL de Smart Device


La biblioteca ATL (Active Template Library) es un conjunto de clases de C++ basadas en plantillas que facilitan la creación de
objetos COM. El Asistente para proyectos ATL de Smart Device crea un proyecto con las estructuras necesarias para contener
objetos COM.
Información general
Muestra la configuración del proyecto actual para el proyecto ATL que se está creando. De manera predeterminada, el proyecto
tiene la siguiente configuración:
La plataforma de destino predeterminada para el proyecto es la primera de la lista de plataformas. En una instalación
predeterminada, la plataforma predeterminada es Pocket PC 2003, pero al instalar y desinstalar los SDK de Windows CE
5.0 puede cambiar el destino predeterminado de las nuevas aplicaciones.
Biblioteca de vínculos dinámicos, que especifica que el servidor es un archivo DLL y, por tanto, un servidor en proceso.
Plataformas
Haga clic en Plataformas, en la columna izquierda del asistente, para mostrar la página Plataformas, Asistente para proyectos
ATL de Smart Device. Utilice esta página para seleccionar los SDK para el proyecto actual.
Configuración de la aplicación
Haga clic en Configuración de la aplicación, en la columna izquierda del asistente, para mostrar la página Configuración de
la aplicación, Asistente para proyectos ATL para Smart Devices. Utilice esta página para seleccionar el tipo de servidor (DLL o
EXE) y ciertas opciones adicionales.
Nota
En los proyectos EXE ATL, los servidores locales COM no se inicializan cuando COM crea instancias si están registrados en un
directorio con un nombre largo de archivo que contiene espacios, por ejemplo \Archivos de programa\My Server\.
Evite esta situación mediante el uso de un nombre de archivo corto sin espacios para registrar la clase. Para obtener más info
rmación, vea Cómo: Especificar la ruta de acceso remota del resultado principal del proyecto. (El valor predeterminado contie
ne espacios).

Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Referencia a ATL para dispositivos
Desarrollo para Smart Device

Generar, Propiedades de configuración, Propiedades del


proyecto de implementación (Cuadro de diálogo)
Especifica la configuración para generar el proyecto de implementación para dispositivos inteligentes seleccionado
actualmente. El nombre del proyecto aparece en la barra de título.
Para mostrar el cuadro de diálogo Propiedades del proyecto de implementación, haga clic con el botón secundario del
mouse en el proyecto en el Explorador de soluciones y, a continuación, haga clic en Propiedades.
Configuración
Especifica la configuración de generación, con valores como Depuración, Versión comercial, etc.
Plataforma
Especifica la plataforma de destino del proyecto activo.
Carpeta Propiedades de configuración
Especifica la categoría de propiedades que se va a mostrar en el panel derecho.
Administrador de configuración
Abre el cuadro de diálogo Administrador de configuración.
Nombre del archivo de resultados
Especifica la ubicación en la que se colocará el archivo CAB cuando se genere. Haga clic en Examinar para seleccionar una
ubicación distinta de la ubicación predeterminada.
Firma Authenticode
Especifica si los archivos de resultados se firmarán con firma Authenticode. Para obtener más información, vea Seguridad en
los proyectos de dispositivos.
Certificado
Especifica un archivo de certificados Authenticode que se utilizará para firmar los archivos. Haga clic en Seleccionar del
almacén para seleccionar un archivo de certificados.
Seleccionar del almacén
Abre el cuadro de diálogo Seleccionar certificado, donde será posible seleccionar los certificados que se deseen utilizar. Para
obtener más información, vea Cómo: Importar y aplicar certificados en proyectos de dispositivos.
Vea también
Referencia
Administrador de configuración (Cuadro de diálogo)
Otros recursos
Seguridad en los proyectos de dispositivos
Desarrollo para Smart Device

Cambiar plataforma de destino (Cuadro de diálogo,


Dispositivos)
Cambia la plataforma de destino de un proyecto de dispositivo administrado a otra plataforma cuyo destino es la misma
versión de .NET Compact Framework.
Para abrir este cuadro de diálogo, haga clic en Proyectosy, a continuación, en Cambiar plataforma de destino. Este
elemento de menú sólo aparece si tiene un proyecto administrado abierto en el IDE de Visual Studio.
Plataforma Actual
Muestra el nombre de la plataforma del proyecto activo.
Cambiar a
Muestra una lista de otras plataformas disponibles cuyo destino es la misma versión de .NET Compact Framework que la de
los destinos de la plataforma actual.
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Valores del Administrador de configuración, Asistente para


proyectos para Smart Device
Utilice este cuadro de diálogo para crear y editar configuraciones de generación de soluciones y configuraciones de proyectos.
Cualquier cambio que realice en las configuraciones de generación de soluciones se reflejará en la página Configuración del
cuadro de diálogo Páginas de propiedades de la solución. Puede obtener acceso al Administrador de configuración
desde el menú Generar, del cuadro de diálogo Páginas de propiedades de la solución, o desde la lista desplegable de
configuraciones de soluciones de la barra de herramientas principal.
Configuración de soluciones activas
Muestra las configuraciones de generación de soluciones disponibles. Utilice esta lista desplegable o la lista desplegable
Configuración de la barra de herramientas principal para cambiar la configuración de soluciones activas. Para crear nuevas
configuraciones de soluciones y modificar las existentes, elija <Nueva...> o <Editar...> en la lista desplegable.
Plataforma de soluciones activas
Muestra las plataformas disponibles para las que se puede generar la solución. Cuando se cambia la plataforma de
soluciones activas, el cambio se aplica a todos los proyectos de la solución. Para crear nuevas plataformas de soluciones y
modificar las existentes, elija <Nueva...> o <Editar...> en la lista desplegable.
Contextos de proyecto
Cada entrada de Contextos de proyecto de la configuración de generación de soluciones seleccionada incluye un nombre
de proyecto, listas desplegables de tipos de configuración y plataformas, y casillas de verificación para seleccionar los
proyectos que se van a generar y (si están activadas) a implementar. La combinación del tipo y la plataforma seleccionados
determina la configuración de proyecto que se va a utilizar. Haga clic en los encabezados de columna para ordenar las
columnas de la cuadrícula.
Proyecto
Muestra los nombres de los proyectos encontrados en la solución actual.
Configuración
Muestra el tipo de generación de proyecto elegido e incluye todos los tipos de generación disponibles. Para crear un nuevo
tipo de generación de proyecto o cambiar el nombre de una generación existente, elija <Nueva...> o <Editar...> en la lista
desplegable.
Plataforma
Muestra la plataforma en la que debe ejecutarse la generación elegida e incluye todas las plataformas disponibles para el
proyecto. Para agregar una nueva plataforma o editar una plataforma existente, elija <Nueva...> o <Editar...> en esta lista
desplegable. El tipo de proyecto con el que está trabajando determina si se puede agregar más de una plataforma y qué
plataformas están disponibles para agregarlas al proyecto. Cuando se agrega una plataforma para un proyecto, se crea una
nueva configuración de proyecto.
Generar
Especifica si el proyecto va a ser generado o no por la configuración de la solución actual. Los proyectos que no están
seleccionados no se generan, aunque existan relaciones de dependencia en ellos. Los proyectos no seleccionados para
generación siguen incluyéndose en la depuración, ejecución, empaquetado e implementación de la solución.
Implementar
Si está activada, especifica si el proyecto se va a implementar o no cuando se utilicen los comandos Ejecutar o
Implementar con la configuración de generación de soluciones seleccionada. Esta casilla de verificación aparece en
proyectos que se pueden implementar.
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Configurar programa previo de emulación (Cuadro de diálogo)


Inserta uno o más archivos XML en la infraestructura de configuración de Pocket PC y Smartphone.
Para mostrar este cuadro de diálogo, haga clic en Opciones en el menú Herramientas, haga clic en Herramientas de
dispositivo, haga clic en Dispositivos, seleccione el emulador, haga clic en Propiedades, seleccione el programa previo y, a
continuación, haga clic en Configurar.
Archivo de puesta en servicio de XML
Inserta uno o más archivos XML en la infraestructura de configuración de Pocket PC y Smartphone para ajustar la
configuración de red, interfaz de usuario y seguridad.
Vea también
Tareas
Cómo: Iniciar el emulador de dispositivos en Visual Studio
Referencia
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Configurar transporte TCP/IP (Cuadro de diálogo)


Proporciona las opciones para especificar las características de transporte en proyectos de dispositivos.
Para abrir este cuadro de diálogo, en el menú Herramientas haga clic en Opciones, Herramientas de dispositivo,
Dispositivos y después haga clic en el botón Configurar adyacente al cuadro Transporte. Si el botón Configurar aparece
atenuado, indica que el transporte seleccionado no es configurable.
Usar número de puerto fijo
Siempre usa este puerto. Seleccione esta opción sino desea que cambie el protocolo de Internet (IP) o el número de puerto
del dispositivo.
Obtener automáticamente una dirección IP mediante ActiveSync
Hace que la configuración de IP se asigne automáticamente. Esta configuración requiere que exista una comunicación
ActiveSync entre el dispositivo y el equipo de desarrollo.
Usar una dirección IP específica
Selecciona la dirección IP que se va a utilizar. La dirección predeterminada es la del host local.
Vea también
Referencia
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Implementar (Cuadro de diálogo, Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Conectar con dispositivo (Cuadro de diálogo)


Pregunta a qué dispositivo físico o emulador desea conectarse.
Para abrir este cuadro de diálogo, en el menú Herramientas, haga clic en Conectar con dispositivo.
Plataforma
Muestra una lista de todas las plataformas instaladas, incluidas aquellas que no están disponibles para el proyecto activo. Si
está abierto un proyecto de dispositivo, se selecciona automáticamente su plataforma.
Si se selecciona Todas las plataformas, muestra una lista de todos los dispositivos instalados.
Dispositivos
Muestra los dispositivos instalados para la plataforma seleccionada en el cuadro Plataforma.
Conectar
Abre una conexión al dispositivo seleccionado en el cuadro Dispositivos. Si el dispositivo es un emulador, el emulador se
abre en el escritorio del equipo de desarrollo.
Vea también
Referencia
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Conectar con <base de datos> (Cuadro de diálogo)


Solicita una contraseña cuando una conexión existente no contiene la contraseña necesaria para tener acceso a la base de
datos.
Este cuadro de diálogo aparece cuando se necesita una contraseña en el Asistente para la configuración de orígenes de datos.
Base de datos
El nombre de archivo de la base de datos (*.sdf).
Archivo
La ruta de acceso completa al archivo de base de datos.
Contraseña
La contraseña necesaria para tener acceso a la base de datos.
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Propiedad Cadena de conexión, cuadro de diálogo Propiedades


de archivo (Dispositivos)
Este tema se ha actualizado para SP1 de Visual Studio 2005.
Como propiedad de un archivo .xsd, especifica una cadena de conexión en tiempo de ejecución para la aplicación que se
ejecuta en el dispositivo.
La cadena de conexión en tiempo de ejecución es una propiedad opcional que se utiliza cuando la cadena de conexión
generada automáticamente no es adecuada. La cadena de conexión generada proviene de la cadena de conexión en el archivo
de esquema .xsd y se considera una cadena de conexión en tiempo de diseño. Esta cadena en tiempo de diseño hace posible
que Visual Studio se conecte a la base de datos en tiempo de diseño y recupere información de esquema. Cuando esta cadena
de conexión en tiempo de diseño no es adecuada para tiempo de ejecución, es posible utilizar la propiedad Cadena de
conexión en tiempo de ejecución para especificar una cadena de conexión personalizada que se desee serializar en el código
generado.
El párrafo siguiente se ha actualizado para SP1 de Visual Studio 2005.
Por ejemplo, las cadenas de conexión de Microsoft SQL Mobile y Microsoft SQL Server 2005 Compact Edition contienen una
ruta de acceso a la base de datos. La cadena de conexión generada, en este caso, se traduce en una cadena de conexión que da
por hecho que la base de datos se encuentra en la misma carpeta que el binario que se está ejecutando. Si la base de datos de
SQL Mobile o SQL Server Compact Edition se encuentra en una ubicación diferente con respecto al dispositivo, se puede
utilizar la propiedad Cadena de conexión en el archivo .xsd para reemplazar la cadena de conexión generada por una cadena
de conexión personalizada.
Al especificar una cadena de conexión personalizada en la propiedad Cadena de conexión del archivo de esquema .xsd, la
cadena de conexión en tiempo de diseño almacenada en el archivo de esquema .xsd no cambia y las características en tiempo
de diseño siguen comportándose igual que siempre. Para obtener más información, vea Cómo: Cambiar la cadena de conexión
en tiempo de diseño (Dispositivos).
El resto de las propiedades de archivo de esta ventana no son específicas de proyectos Smart Device. Para obtener más
información, vea Propiedades de archivo.
Para abrir la Ventana Propiedades, seleccione el archivo .xsd en el Explorador de soluciones y, a continuación, haga clic en la
Ventana Propiedades del menú Ver.
Cadena de conexión
Especifica la cadena de conexión para establecer conexión con la base de datos en el dispositivo en tiempo de ejecución.
Si el cuadro está en blanco, la aplicación utiliza la cadena de conexión predeterminada almacenada en el archivo de esquema
.xsd.
Vea también
Tareas
Cómo: Cambiar la cadena de conexión en tiempo de ejecución (Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Nombres del control, Asistente para controles ActiveX de Smart


Device MFC
Utilice esta página con el fin de especificar los nombres para la clase de página de propiedades y clase de control, los nombres
de tipos y los identificadores de tipos para el control en cuestión. Con la excepción de Nombre corto, puede modificar los
demás campos por separado. Si cambia el texto de Nombre corto, este cambio se reflejará en los nombres de los demás
campos de esta página. El comportamiento de nomenclatura está diseñado para que todos los nombres sean fácilmente
identificables al crear los controles.
Nombre corto
Proporciona un nombre abreviado para el control en cuestión. De manera predeterminada, este nombre se basa en el
nombre del proyecto que especificó en el cuadro de diálogo Nuevo proyecto. El nombre que especificó determinará los
nombres de las clases, los nombres de los tipos y los identificadores de tipo, a menos que los modifique individualmente.
Nombre de la clase del control
De manera predeterminada, el nombre de la clase del control se basa en el nombre corto, con el prefijo C y el sufijo Ctrl. Por
ejemplo, si el nombre corto del control es Price, el nombre de la clase del control será CPriceCtrl.
Archivo .h del control
De manera predeterminada, el nombre del archivo de encabezado se basa en el nombre corto, con el sufijo Ctrl y la
extensión de archivo .h. Por ejemplo, si el nombre corto del control es Price, el nombre del archivo de encabezado será
PriceCtrl.h. El nombre de este campo debe coincidir con el nombre de la clase del control.
Archivo .cpp del control
De manera predeterminada, el nombre del archivo de encabezado se basa en el nombre corto, con el sufijo Ctrl y la
extensión de archivo .cpp. Por ejemplo, si el nombre corto del control es Price, el nombre del archivo de encabezado será
PriceCtrl.cpp. El nombre de este campo debe coincidir con el nombre de encabezado.
Nombre de tipo del control
De manera predeterminada, el nombre del tipo del control se basa en el nombre corto, seguido de Control. Por ejemplo, si
el nombre corto del control es Price, el nombre de la clase del control será Price Control. Si modifica el valor de este
campo, asegúrese de que el nombre indica una herencia.
Id. de tipo del control
Establece el identificador de tipo de control de la clase de control. El control escribe esta cadena en el Registro cuando se
agrega a un proyecto. Las aplicaciones contenedoras utilizan esta cadena para crear una instancia del control. De manera
predeterminada, el identificador de tipos del control se basa en el nombre del proyecto, especificado en el cuadro de diálogo
Nuevo proyecto y el nombre corto. Este nombre debe coincidir con el nombre de tipo. De manera predeterminada, el
identificador de tipo de control aparece como sigue: ProjectName.ShortNameCtrl.1 Si cambia el nombre corto en este
cuadro de diálogo, el identificador de tipo de control aparecerá como sigue: ProjectName.NewShortNameCtrl.1
Nombre de la clase de página de propiedades
De manera predeterminada, el nombre de la clase de la página de propiedades se basa en el nombre corto, con el prefijo C y
el sufijo PropPage. Por ejemplo, si el nombre corto del control es Price, el nombre de la clase de la página de propiedades
será CPricePropPage. Este nombre debe coincidir con el nombre de la clase del control, con el sufijo PropPage anexado.
Archivo .h de la página de propiedades
De manera predeterminada, el nombre del archivo de encabezado de la página de propiedades se basa en el nombre corto,
con el sufijo PropPage y la extensión de archivo .h. Por ejemplo, si el nombre corto del control es Price, el nombre del
archivo de encabezado de la página de propiedades será PricePropPage.h. Este nombre debe coincidir con el nombre de la
clase.
Archivo .cpp de la página de propiedades
De manera predeterminada, el nombre del archivo de implementación de la página de propiedades se basa en el nombre
corto, con el sufijo PropPage y la extensión de archivo .cpp. Por ejemplo, si el nombre corto del control es Price, el nombre
del archivo de encabezado de la página de propiedades será PricePropPage.cpp. Este nombre debe coincidir con el nombre
del archivo de encabezado.
Nombre de tipo de la página de propiedades
De manera predeterminada, el nombre del tipo de página de propiedades se basa en el nombre corto, seguido de Property
Page. Por ejemplo, si el nombre corto del control es Price, el nombre del tipo de página de propiedades será Price
Property Page. Si modifica el valor de este campo, asegúrese de que el nombre indica la clase del control.
Id. de tipo de la página de propiedades
Establece el identificador de la clase de página de propiedades. El control escribe esta cadena en el Registro cuando se aplica
a un proyecto. Las aplicaciones contenedoras la utilizan para crear una instancia de la página de propiedades del control. De
manera predeterminada, el identificador de tipos de la página de propiedades se basa en el nombre del proyecto,
especificado en el cuadro de diálogo Nuevo proyecto y el nombre corto. Este nombre debe coincidir con el nombre de tipo.
De manera predeterminada, el identificador de tipo de la página de propiedades aparece como sigue:
ProjectName.ShortNamePropPage.1 Si cambia el nombre corto en este cuadro de diálogo, el identificador de tipo de la
página de propiedades aparecerá como sigue: ProjectName.NewShortNamePropPage.1
Vea también
Referencia
Asistente para controles ActiveX de Smart Device MFC
Desarrollo para Smart Device

Configuración del control, Asistente para controles ActiveX de


Smart Device MFC
Describe la página Configuración de control del Asistente para controles ActiveX de Smart Device MFC.
Utilice las opciones de esta página para especificar el comportamiento que desea para el control. Por ejemplo, puede basar el
control en tipos de control estándar de Windows CE, optimizar el comportamiento y la apariencia del control, o especificar que
el control puede actuar como un contenedor para otros controles.
Vea MFC ActiveX Controls: Optimization para obtener más información sobre cómo seleccionar opciones en esta página para
maximizar la eficacia del control.
Crear control basado en
Puede seleccionar en la lista el tipo de control del que debe heredar su control. La lista incluye controles comunes adicionales
expuestos a su aplicación MFC en commctrl.h. La selección determina el estilo del control en la función PreCreateWindow en
el archivo ProjNameCtrl.cpp. Vea MFC ActiveX Controls: Subclassing a Windows Control para obtener más información.

BUTTON Un control de botón

COMBOBOX Un control de cuadro combinado

EDIT Un control de edición

LISTBOX Un control de cuadro de lista

SCROLLBAR Un control de barra de desplazamiento

STATIC Un control estático

msctls_progress32 Un control común de barra de progreso

msctls_statusbar32 Un control común de barra de estado

msctls_trackbar32 Un control común de barra de seguimiento

msctls_updown32 Un control común de botón de número

SysHeader32 Un control común de encabezado

SysListView32 Un control común de vista de lista

SysTabControl32 Un control común de ficha

SysTreeView32 Un control común de vista de árbol

Características adicionales
Se activa cuando está visible
Especifica que se crea una ventana para el control cuando éste pase a estar visible. La opción Se activa cuando está visible
está establecida de manera predeterminada. Si desea aplazar la activación del control hasta que el contenedor lo necesite
(por ejemplo, cuando se haga clic sobre él), desactive esta función. Al desactivar esta función optimizará el control, ya que
evitará la creación de una ventana hasta que sea necesario. Vea Turning off the Activate When Visible Option para obtener
más información acerca de esta opción.
No visible en tiempo de ejecución
Especifica que el control no tiene interfaz de usuario en tiempo de ejecución. Un ejemplo de control que podría ser invisible
Especifica que el control no tiene interfaz de usuario en tiempo de ejecución. Un ejemplo de control que podría ser invisible
es el Temporizador.
Tiene un cuadro de diálogo Acerca de
Especifica que el control tiene el cuadro de diálogo Acerca de estándar de Windows CE, que muestra el número de versión y
la información de copyright.
Nota
La forma de tener acceso a la ayuda del control dependerá de cómo haya implementado la ayuda y de si la integró en la ay
uda del contenedor. Vea Adding Context-Sensitive Help to an MFC ActiveX Control para obtener más información acerca d
e cómo de integrar la ayuda.

Si establece esta opción, se insertará el método de control AboutBox en la clase de control del proyecto
(CProjNameCtrl.cpp) y se agregará AboutBox al mapa de envíos del proyecto. Esta opción está establecida de forma
predeterminada.
Código de dibujo optimizado
Especifica que el contenedor restaura automáticamente los objetos GDI originales después de haber dibujado todos los
controles del contenedor, dibujados en el mismo contexto de dispositivo. Vea Optimizing Control Drawing para obtener más
información acerca de esta característica.
Activación sin ventana
Especifica que el control no genera una ventana al activarse. La activación sin ventana permite utilizar controles no
rectangulares o transparentes; además, los controles sin ventana no producen la sobrecarga del sistema que requiere un
control con ventana. Un control sin ventana no permite la activación de un contexto de dispositivo no recortado o sin
parpadeo. Los contenedores creados antes de 1996 no admiten la activación sin ventana. Vea Providing Windowless
Activation para obtener más información sobre cómo utilizar esta opción.
Contexto de dispositivo no recortado
Reemplaza COleControl::GetControlFlags en el encabezado de control (projnamectrl.h) para deshabilitar la llamada a
IntersectClipRect realizada por COleControl. Si selecciona Contexto de dispositivo no recortado, la velocidad aumentará
ligeramente. Si selecciona Activación sin ventana, esta característica no estará disponible. Vea Using an Unclipped Device
Context para obtener más información.
Activación sin parpadeo
Elimina las operaciones de dibujo y el parpadeo visual correspondiente que se produce cuando el control cambia de estado
(de activo a inactivo, o viceversa). Si selecciona Activación sin ventana, esta característica no estará disponible. Cuando se
establece esta opción, el indicador noFlickerActivate se incluye en los indicadores devueltos por
COleControl::GetControlFlags. Vea Providing Flicker-Free Activation para obtener más información.
Disponible en el cuadro de diálogo Insertar objeto
Especifica que el control estará disponible en el cuadro de diálogo Insertar objeto para contenedores habilitados. Cuando
se seleccione esta opción, se incluye el indicador afxRegInsertable en el conjunto de indicadores devuelto por
AfxOleRegisterControlClass. El cuadro de diálogo Insertar objeto permite al usuario insertar objetos existentes o recién
creados en un documento compuesto.
Notificaciones con el puntero del mouse cuando está inactivo
Habilita el procesamiento de notificaciones del puntero del mouse en el control, independientemente de si el control está
activo o no. Cuando se seleccione esta opción, se incluye el indicador pointerInactive en el conjunto de indicadores
devuelto por COleControl::GetControlFlags. Para obtener más información sobre cómo utilizar el Diseñador de tablas, vea
Providing Mouse Interaction While Inactive.
Actúa como un control de marco sencillo
Especifica que el control es un contenedor para otros controles estableciendo el bit OLEMISC_SIMPLEFRAME para el
control. Vea Contención de sitio de marco simple para obtener más información.
Cargar propiedades de forma asincrónica
Permite restablecer datos asincrónicos anteriores e iniciar una nueva carga de la propiedad asincrónica del control.
Vea también
Referencia
Asistente para controles ActiveX de Smart Device MFC
Desarrollo para Smart Device

Panel Depuración, Diseñador de proyectos


Proporciona datos escritos por el usuario para especificar argumentos de la línea de comandos, el directorio de trabajo y el
proyecto de inicio.
Para abrir el Diseñador de proyectos, haga clic con el botón secundario del mouse en <Nombre de proyecto> en el
Explorador de soluciones y, a continuación, haga clic en Propiedades en el menú contextual.
Proyecto de inicio
Especifica que el proyecto actual es el proyecto de inicio.
Iniciar programa externo
Cuando el proyecto actual no se especifica como proyecto de inicio, especifica el programa externo que actúa en su lugar
como acción de inicio.
Argumentos de la línea de comandos
Especifica los argumentos de la línea de comandos.
Hay dos listas desplegables.
Configuración
Plataforma
Listas desplegables
Lista desplegable de configuración
Muestra una lista de otras configuraciones disponibles que se pueden seleccionar, como Depuración y Versión
Lista desplegable de plataformas
Muestra una lista de plataformas disponibles, como Activa (cualquier CPU).
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Depurar, Propiedades de configuración, Páginas de


propiedades de <nombreDeProyecto> (Cuadro de diálogo,
Dispositivos)
La página de propiedades Depuración en la carpeta Propiedades de configuración especifica varias propiedades del
depurador.
Depurador para iniciar
Una lista desplegable de depuradores disponibles para iniciar en la sesión de depuración.
Archivo ejecutable remoto
El nombre del archivo ejecutable remoto que se utilizará para iniciar la sesión de depuración.
Argumentos de comando
Argumentos que se pasarán al archivo ejecutable remoto.
Hay dos listas desplegables y un botón.
Administrador de configuración
Plataforma
Listas desplegables
Lista desplegable de configuración
Muestra una lista de otras configuraciones disponibles que se pueden seleccionar, como Depuración y Versión.
Lista desplegable de plataformas
Muestra una lista de otras plataformas disponibles, como Smartphone 2003 o Pocket PC 2003.
Botón del administrador de configuración
El botón Administrador de configuración proporciona acceso al Administrador de configuración (Cuadro de diálogo) del
proyecto.
Vea también
Referencia
Páginas de propiedades (C++)
Desarrollo para Smart Device

Definir color (Cuadro de diálogo, Dispositivos)


Especifica el matiz de un color y se puede utilizar para agregar matices personalizados. Si cambia el matiz, los valores de rojo,
verde y azul se cambian para coincidir. El intervalo de valores oscila entre 0 y 239.
Para mostrar este cuadro de diálogo de la vista Diseño, haga clic con el botón secundario del mouse en cualquier componente
que tenga propiedades de color, como un control TextBox, haga clic en Propiedades en el menú contextual y seleccione una
propiedad de color, como Forecolor, en la ventana Propiedades. A continuación, haga clic en la flecha de cuadro desplegable
que aparece a la derecha de la lista de propiedades, haga clic en Personalizada y, posteriormente, haga clic con el botón
secundario del mouse en uno de los mosaicos que se encuentran en la parte inferior de la ficha Personalizado.
La asignación de color se almacena para cada plataforma instalada como recurso, en el ensamblado del diseñador de la
plataforma. Los colores RGB y con nombre son los mismos para las plataformas de escritorio y de dispositivo, pero los colores
del sistema difieren. Los colores del sistema se traducen en tiempo de diseño. La selección del color se limita a los colores
admitidos en .NET Compact Framework y podría diferir de una plataforma a otra.
Si no se encuentra ningún esquema de mapa de colores para una plataforma, se utiliza el escritorio predeterminado.
Es posible utilizar el mouse o la tecla TABULADOR para colocar el punto de inserción en los cuadros Matiz, Saturación y
Luminosidad. A continuación, haga clic en F1 para mostrar más información sobre herramientas.
Vea también
Referencia
Editor de fuentes (Cuadro de diálogo, Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Implementar (Cuadro de diálogo, Dispositivos)


Ofrece una lista de los dispositivos instalados que pueden ejecutar una aplicación que tenga como destino la plataforma
asociada a un proyecto de dispositivo.
Este cuadro de diálogo se abre cuando:
Se ha seleccionado Mostrar dispositivos antes de implementar un proyecto de dispositivo en la página General
de opciones de Herramientas de dispositivo (disponible al hacer clic en Opciones en el menú Herramientas) y
Se ha emitido el comando Implementar (ya sea explícitamente desde el menú Generar o implícitamente después de los
comandos Iniciar, en el menú Depuración).
Dispositivo
Muestra una lista de dispositivos instalados, incluidas las imágenes del emulador.
Si se selecciona un dispositivo y, a continuación, se cierra este cuadro de diálogo, el dispositivo quedará seleccionado para el
proyecto.
Mostrar opción
Si está seleccionada, muestra el cuadro de diálogo Implementar cada vez que se implementa un proyecto. Esta opción
también se puede seleccionar mediante una casilla de verificación en General, Herramientas de dispositivo, Opciones
(Cuadro de diálogo).
Implementar
Se conecta al dispositivo de destino.
Si se abrió implícitamente desde los comandos Iniciar, inicia la aplicación después de conectarse al dispositivo.
Vea también
Tareas
Cómo: Cambiar el dispositivo predeterminado (Proyectos administrados)
Cómo: Cambiar el dispositivo predeterminado (proyectos nativos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Implementación, Propiedades de configuración, Páginas de


propiedades de <nombreDeProyecto> (Cuadro de diálogo,
Dispositivos)
Con la inclusión de la implementación de dispositivos multiplataforma, ahora el usuario puede establecer propiedades de
implementación de dispositivos por cada dispositivo. La página de propiedades Implementación de la carpeta Propiedades
de configuración, que se muestra en la página de propiedades de proyecto al seleccionar un nodo de proyecto en
Explorador de soluciones, contiene dos secciones de propiedades y dos listas desplegables además de un botón.
General
Acciones del servidor
General
Dispositivo de implementación
Especifica el dispositivo en el que se implementará.
Archivos adicionales
Lista de archivos adicionales separada por caracteres de punto y coma que se implementan en el dispositivo, junto con los
directorios de origen y destino y un valor que indica si el archivo se debe registrar en el dispositivo de destino. No incluya el
resultado del proyecto principal ni los archivos marcados como contenido implementable. Para obtener más información
sobre las macros que se pueden utilizar en este cuadro de diálogo, consulte Macros para propiedades y comandos de
generación.
Directorio remoto
Especifica el directorio del dispositivo de implementación al que se copiará la aplicación. % CSIDL_PROGRAM_FILES%\,
proporcionado de forma predeterminada, se implementará en la ubicación correcta en Smartphone o Pocket PC.
Acciones del servidor
Registrar resultados
Especifica si el archivo DLL del resultado del proyecto principal se va a registrar en el dispositivo de destino. La lista
desplegable permite seleccionar Sí o No. Seleccione Sí para proyectos Active X de MFC y proyectos ATL.
Hay dos listas desplegables y un botón.
Administrador de configuración
Plataforma
Cuadros de listas desplegables
Cuadro de lista desplegable de configuración
Muestra una lista de otras configuraciones disponibles que se pueden seleccionar, como Depuración y Versión
Cuadro de lista desplegable de plataformas
Muestra una lista de otras plataformas disponibles, como Smartphone 2003 o Pocket PC 2003
Botón del administrador de configuración
El botón Administrador de configuración proporciona acceso al Administrador de configuración (Cuadro de diálogo) del
proyecto.
Vea también
Referencia
Páginas de propiedades (C++)
Desarrollo para Smart Device

Componentes de dispositivo (Ficha), Cuadro de herramientas


Muestra aquellos componentes que se pueden arrastrar a un formulario Windows Forms y que no son elementos visual de un
proyecto para Smart Device. En Visual Studio 2005, entre dichos componentes se incluyen: Puntero, Puerto serie,
Temporizador, Panel de entrada, Notificación, Botón de hardware, Cola de mensajes y Origen de enlace.
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Controles de dispositivo (Ficha), Cuadro de herramientas


Muestra los controles que admite la plataforma de destino. Esta ficha se encuentra disponible cuando un proyecto para Smart
Device está activo.
Si la ficha Controles de dispositivo no se puede ver, haga clic con el botón secundario del mouse en el Cuadro de
herramientas y seleccione Restablecer cuadro de herramientas o Mostrar todos.
Es posible obtener acceso al Cuadro de herramientas desde el menú Ver.
Vea también
Referencia
Cuadro de herramientas
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Propiedades de dispositivo (Cuadro de diálogo)


Proporciona opciones para especificar las propiedades de dispositivos, incluyendo tanto emuladores como dispositivos físicos.
Para mostrar este cuadro de diálogo, haga clic en Opciones en el menú Herramientas, haga clic en Herramientas de
dispositivo, haga clic en Dispositivos, seleccione el dispositivo y, a continuación, haga clic en Propiedades.
Ubicación de salida predeterminada en el dispositivo
Especifica la ruta en la que se implementará la aplicación en el dispositivo remoto.
Transporte
Especifica el transporte.
Visual Studio proporciona un transporte DMA para emuladores y un transporte de conexión de TCP para dispositivos físicos.
Nota
El transporte DMA proporciona conectividad de gran velocidad y confiable para emuladores. Aunque haya un transporte T
CP disponible para emuladores, es menos confiable que el transporte DMA. Utilice el transporte TCP para emuladores sólo
por razones concretas de peso.

Configurar
Abre el cuadro de diálogo Configurar transporte. Si el transporte es TCP/IP, puede utilizar un número de puerto fijo y
especificar cómo se va a definir la dirección IP. Si el botón Configurar está atenuado, se indica que el transporte
seleccionado no es configurable.
Programa previo
Especifica el programa previo.
Configurar
Para dispositivos físicos: Abre un cuadro de diálogo Configurar programa previo manual, donde puede especificar el
número de puerto y la dirección IP del dispositivo.
Si el botón Configurar aparece atenuado, el programa previo seleccionado no es configurable.
Detectar cuando el dispositivo está desconectado
Permite detectar rápidamente si un dispositivo está conectado.
Para depurar mediante KITL (Kernel Independent Transport Layer), desactive esta casilla de verificación.
Los cambios realizados en esta propiedad surten efecto en la siguiente conexión al dispositivo.
Opciones del emulador
Abre el cuadro de diálogo Propiedades del emulador, donde puede establecer las propiedades del emulador, como la
presentación y las características de conexión. Esta opción no aparece si ha seleccionado un dispositivo físico.
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Panel de dispositivos, Diseñador de proyectos


Proporciona los controles para seleccionar un dispositivo y especificar ciertas características de los proyectos para dispositivos
inteligentes. El panel Dispositivos sólo aparece en proyectos de dispositivos.
Para abrir el Diseñador de proyectos, haga clic con el botón secundario del mouse en el proyecto en Explorador de
soluciones y, a continuación, haga clic en Propiedades en el menú contextual.
UI
Dispositivo de destino
Especifica el dispositivo al que se destina la aplicación. Los dispositivos pueden ser hardware físico o emuladores.
Carpeta de archivo de resultados
Especifica la ruta del dispositivo remoto en la que se descargará la aplicación.
Implementar la versión más reciente de última de .NET Compact Framework (incluidos los Service Pack)
Implementa la versión más reciente si el equipo de desarrollo tiene una versión de .NET Compact Framework más reciente
que la versión que aparece en el dispositivo o el emulador.
Firmar el resultado del proyecto con este certificado
Especifica que los archivos de resultados se firmarán utilizando el o los certificados especificados.
Para llenar el cuadro con uno o varios certificados, haga clic en Seleccionar certificados.
Seleccionar certificado
Abre el cuadro de diálogo Seleccionar certificado, donde podrá seleccionar los certificados que desee utilizar.
Para obtener más información, vea Cómo: Importar y aplicar certificados en proyectos de dispositivos.
Proporcionar el certificado al dispositivo
Especifica si se suministrará el dispositivo y, de ser así, si dicho certificado se ubicará en el almacén de certificados con
privilegios o sin privilegios.
Para obtener más información, vea Cómo: Poner en servicio un dispositivo en un proyecto de Visual Basic o Visual C#.
Vea también
Otros recursos
Seguridad en los proyectos de dispositivos
Programación para dispositivos con .NET Compact Framework
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de


diálogo)
Proporciona controles para cambiar la configuración de los proyectos de dispositivo.
Para abrir este cuadro de diálogo, en el menú Herramientas haga clic en Opciones, haga clic en Herramientas de
dispositivo y, después, en Dispositivos.
Mostrar dispositivos para la plataforma
Muestra una lista de todas las plataformas instaladas, incluidas aquellas que no están disponibles para el proyecto activo. Si
está abierto un proyecto de dispositivo, se selecciona automáticamente su plataforma.
Si se selecciona Todas las plataformas, muestra una lista de todos los dispositivos instalados.
Dispositivos
Seleccione el dispositivo que desee configurar de la lista de dispositivos instalados para la plataforma seleccionada, en el
cuadro Mostrar dispositivos para la plataforma. Si está abierto un proyecto de dispositivo, se selecciona
automáticamente su dispositivo.
Dispositivo predeterminado
Establece el destino de implementación predeterminado entre los dispositivos disponibles para la plataforma seleccionada
en el cuadro Mostrar dispositivos para la plataforma. El control está atenuado y no disponible si se ha seleccionado
Todas las plataformas. Los cambios realizados en el valor predeterminado se conservan para los todos los proyectos
nuevos, pero no afectan a los proyectos actualmente activos.
Guardar como
Abre el cuadro de diálogo Guardar dispositivo como, donde puede crear una copia del dispositivo seleccionado en el
cuadro Dispositivos.
Cambiar nombre
Cambia el nombre del dispositivo seleccionado en el cuadro Dispositivos.
Eliminar
Elimina el dispositivo seleccionado en el cuadro Dispositivos.
Si el botón Eliminar está atenuado, se indica que el dispositivo seleccionado no se puede eliminar. No se puede quitar un
dispositivo si
se instaló con el producto;
es el dispositivo predeterminado para una plataforma o
está seleccionado como dispositivo de destino en un proyecto actualmente abierto.
Propiedades
Abre el cuadro de diálogo Propiedades de dispositivo para el dispositivo seleccionado en el cuadro Dispositivos.
Vea también
Referencia
Implementar (Cuadro de diálogo, Dispositivos)
General, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Factores de forma, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Cadenas de plantillas de documentos, Asistente para


aplicaciones de Smart Device MFC
Describe la página Cadenas de plantillas de documentos del Asistente para aplicaciones de Smart Device MFC.
En esta página del Asistente para aplicaciones de Smart Device MFC puede proporcionar o refinar las siguientes opciones
como ayuda para la administración y localización de documentos. Las cadenas de plantillas de documentos están disponibles
para las aplicaciones que incluyan Compatibilidad con la arquitectura documento/vista en el Tipo de aplicación. No están
disponibles para cuadros de diálogo. Como la mayoría de las cadenas de plantillas de documentos están visibles y las utilizan
los usuarios de la aplicación, están localizadas al Idioma del recurso indicado en la página Tipo de aplicación del asistente.
Cadenas no traducidas
Se aplica a las aplicaciones que crean documentos de usuario. Los usuarios podrán abrir, imprimir y guardar documentos
más fácilmente si especifica una extensión de archivo y un identificador de tipo de archivo. Estos elementos no están
localizados ya que no los debe utilizar el usuario sino el sistema.
Option Description
Extensió Establece la extensión de archivo asociada a los documentos que guarda el usuario al utilizar la aplicación. Por eje
n de arc mplo, si el nombre del proyecto es Widget, podría asignar al archivo la extensión .wgt. Cuando escriba la extensió
hivo n del archivo, no incluya el punto.
Si especifica una extensión de archivo, el Explorador podrá imprimir los documentos de la aplicación sin iniciarla c
uando el usuario coloque el icono de documento en un icono de impresora.
Si no especifica una extensión, el usuario deberá especificar una extensión de archivo al guardar archivos. El asiste
nte no proporciona una extensión de archivo predeterminada.

Id. de tip Establece la etiqueta para el tipo de documento en el Registro del sistema.
o de arc
hivo

Cadenas traducidas
Produce cadenas asociadas a la aplicación y el documento que leen y utilizan los usuarios de la aplicación, por lo que las
cadenas están localizadas.
Optio Description
n
Lengu Indica bajo el idioma en que se muestran las cadenas para todos los cuadros situadas bajo Cadenas traducidas. Par
aje a cambiar el valor de este cuadro, seleccione el idioma apropiado en Idioma del recurso en la página Tipo de aplica
ción del Asistente para aplicaciones de Smart Device MFC.

Título Establece el texto que aparece en la parte superior del marco principal de la aplicación. De manera predeterminada,
del m es el nombre del proyecto.
arco p
rincip
al

Nomb Identifica el tipo de documento bajo el que puede agruparse un documento de la aplicación. De manera predetermin
re del ada, es el nombre del proyecto. Cambiar el valor predeterminado no afecta a las demás opciones de este cuadro de
tipo d diálogo.
e docu
mento
Nomb Establece el nombre que los usuarios pueden indicar para buscar archivos de ese tipo de archivos. Esta opción está d
re de f isponible en las opciones Tipo de archivos y Guardar como tipo de los cuadros de diálogo estándar de Windows
iltro Abrir y Guardar como. De forma predeterminada, el nombre del proyecto más Files, seguido por la extensión espec
ificada en Extensión de archivo. Por ejemplo, si el nombre del proyecto es Widget y la extensión de archivo es .wgt
, el valor de Nombre de filtro será Widget Files (*.wgt) de manera predeterminada.

Nuevo Establece el nombre que aparece en el cuadro de diálogo Nuevo estándar de Windows, si hay más de una plantilla
nombr de documento. Si su aplicación es un servidor de automatización, se utiliza este nombre como nombre corto del obj
e cort eto de automatización. De manera predeterminada, es el nombre del proyecto.
o del a
rchivo
Nomb Establece el nombre del tipo de archivo en el Registro del sistema. Si su aplicación es un servidor de automatización,
re larg se utiliza este nombre como nombre largo del objeto de automatización. De manera predeterminada, es el nombre
o del t del proyecto más .Document.
ipo de
archiv
o

Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Editor de fuentes (Cuadro de diálogo, Dispositivos)


Proporciona las opciones para especificar fuentes en los proyectos de dispositivos.
Para mostrar este cuadro de diálogo en la vista Diseño, haga clic con el botón secundario del mouse (ratón) en cualquier
componente que tenga una propiedad Fuente (por ejemplo, el propio formulario), haga clic en Propiedades en el menú
contextual, seleccione Fuente en la ventana Propiedades y, a continuación, haga clic en Examinar (…).
Este cuadro de diálogo es ligeramente distinto de su homólogo del escritorio. En concreto, la casilla de verificación Mostrar
todas las fuentes tiene en cuenta el hecho de que es probable que el dispositivo de destino no admita todas las fuentes
disponibles en el equipo de desarrollo. Al desactivar la casilla de verificación, se muestran sólo las fuentes predefinidas para el
dispositivo de destino.
Nota
También puede agregar su propia fuente del equipo de desarrollo seleccionándola y copiando sus archivos del escritorio al d
irectorio Windows\Fonts del dispositivo.

Fuente
Muestra las fuentes disponibles.
Estilo de fuente
Muestra los estilos disponibles para la fuente especificada.
Tamaño
Muestra los tamaños de punto disponibles para la fuente especificada.
Mostrar todas las fuentes
Muestra las fuentes disponibles para el proyecto de dispositivo activo. Al activar la casilla de verificación, se muestran todas
las fuentes disponibles en el equipo de desarrollo.
Tachado
Especifica si se tacha la fuente y los colores disponibles para la misma.
Subrayado
Especifica si se subraya la fuente y los colores disponibles para la misma.
Muestra
Muestra un ejemplo del aspecto que tendrá el texto con la configuración de fuente especificada.
Las fuentes disponibles para cada plataforma son las siguientes:
Pocket PC: Courier New, Tahoma
Smartphone: Nina
Windows CE: Arial, Tahoma
Vea también
Referencia
Definir color (Cuadro de diálogo, Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Propiedades de factor de forma (Cuadro de diálogo,


Dispositivos)
Proporciona opciones para cambiar la configuración de factor de forma en proyectos de dispositivos.
Si un proyecto está abierto cuando realiza los cambios, éstos no aparecerán hasta que se cierre y vuelva a abrir la ventana del
diseñador.
Para mostrar este cuadro de diálogo, haga clic en Opciones en el menú Herramientas, haga clic en Herramientas de
dispositivo, haga clic en Factores de forma, seleccione el factor de forma y, a continuación, haga clic en Propiedades.
Vista previa de máscara
Muestra la vista previa de la máscara seleccionada.
Máscara
Establece la máscara asociada al factor de forma seleccionado. Para seleccionar una máscara diferente, haga clic en el botón
Examinar para abrir el archivo XML adecuado.
Habilitar compatibilidad de rotación
Habilita la compatibilidad de rotación en tiempo de diseño.
Resolución horizontal
Establece la resolución horizontal de los formularios destinados a este factor de forma en el Diseñador de Windows Forms.
Resolución vertical
Establece la resolución vertical de los formularios destinados a este factor de forma en el Diseñador de Windows Forms.
Mostrar máscara
Muestra la máscara del factor de forma seleccionado alrededor del formulario en tiempo de diseño y tiempo de emulación.
Aunque seleccione este valor predeterminado, el diseñador sólo muestra la máscara si se selecciona Mostrar máscara en el
cuadro de diálogo General, Herramientas de dispositivo, Opciones.
Ancho de la pantalla
Configura el número de píxeles que establecen el ancho de la pantalla del emulador en el equipo de desarrollo.
Si se selecciona Mostrar máscara, el ancho de la pantalla del emulador ya está establecido y este control aparece atenuado.
Alto de la pantalla
Configura el número de píxeles que establecen el alto de la pantalla del emulador en el equipo de desarrollo.
Si se selecciona Mostrar máscara, el alto de la pantalla del emulador ya está establecido y este control aparece atenuado.
Colores del monitor
Establece una profundidad de color por píxel para la pantalla del emulador. Los valores habituales son 8, 16 y 32.
Si se selecciona Mostrar máscara, la profundidad de color de la pantalla del emulador ya está establecida y este control
aparece atenuado.
Vea también
Tareas
Cómo: Cambiar la orientación y la resolución de formularios (Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Factores de forma, Herramientas de dispositivo, Opciones


(Cuadro de diálogo)
Proporciona opciones para especificar factores de forma y sus propiedades en proyectos de dispositivos administrados.
Cada plataforma tiene un factor de forma predeterminado que se puede cambiar para adaptarlo a las necesidades del
proyecto. Por ejemplo, puede elegir el tamaño de pantalla y la resolución que necesita.
Si un proyecto está abierto cuando realiza los cambios, éstos no aparecerán hasta que se cierre y vuelva a abrir la ventana del
diseñador.
Para abrir este cuadro de diálogo, en el menú Herramientas haga clic en Opciones, haga clic en Herramientas de
dispositivo y, después, en Factores de forma.
Mostrar los factores de forma para la plataforma
Muestra los factores de forma instalados para la plataforma seleccionada. Al seleccionar Todas las plataformas, se
muestran todos los factores de forma de todas las plataformas instaladas.
Factores de forma
Muestra los factores de forma instalados para la plataforma seleccionada en Mostrar factores de forma para la
plataforma.
Factor de forma predeterminado
Establece el factor de forma predeterminado en tiempo de diseño para los nuevos proyectos destinados a la plataforma
seleccionada en Mostrar factores de forma para la plataforma. (Si seleccionó Todas las plataformas, esta opción
aparece atenuada).
Guardar como
Abre el cuadro de diálogo Guardar como, que permite guardar una copia del factor de forma seleccionado.
Cambiar nombre
Cambia el nombre del factor de forma seleccionado.
Eliminar
Elimina el factor de forma seleccionado.
Si el botón Eliminar está atenuado, indica que el factor de forma seleccionado no se puede eliminar. Un factor de forma no
se puede eliminar en los siguientes casos:
Se instaló con el producto;
Es el factor de forma predeterminado para una plataforma.
Propiedades
Inicia el cuadro de diálogo Propiedades del factor de forma del factor de forma seleccionado.
Vea también
Referencia
Propiedades de factor de forma (Cuadro de diálogo, Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

General, Firmar con Authenticode, Propiedades de


configuración, Páginas de propiedades de
<nombreDeProyecto> (Cuadro de diálogo, Dispositivos)
La página de propiedades Firmar con Authenticode de la carpeta Propiedades de configuración, que se muestra en las
páginas de propiedades de un proyecto cuando se selecciona un nodo de proyecto en el Explorador de soluciones, contiene
una sección de propiedades:
General
General
Firma Authenticode
Especifica si se firmará el resultado principal del proyecto.
Dispositivo de provisión
Especifica si se pone o no en servicio el dispositivo de destino y, si es así, en qué almacén se coloca el certificado.
Hay dos listas desplegables y un botón.
Administrador de configuración
Plataforma
Listas desplegables
Lista desplegable de configuración
Muestra una lista de otras configuraciones disponibles que se pueden seleccionar, como Depuración y Versión
Lista desplegable de plataformas
Muestra una lista de otras plataformas disponibles, como Smartphone 2003 o Pocket PC 2003
Botón del administrador de configuración
El botón Administrador de configuración proporciona acceso al Administrador de configuración (Cuadro de diálogo) del
proyecto.
Vea también
Referencia
Páginas de propiedades (C++)
Desarrollo para Smart Device

General, Herramientas de dispositivo, Opciones (Cuadro de


diálogo)
Establece las opciones generales para un proyecto de dispositivos administrados.
Para abrir este cuadro de diálogo, en el menú Herramientas haga clic en Opciones, haga clic en Herramientas de
dispositivo y, después, en General.
Mostrar dispositivos antes de implementar un proyecto de dispositivo
Abre el cuadro de diálogo Implementar cada vez que se implementa un proyecto. Seleccione esta opción si cambia con
frecuencia de dispositivo (por ejemplo, entre un dispositivo físico y su emulador). Si realiza la implementación en un solo
dispositivo, puede desactivar esta casilla de verificación, con lo cual el cuadro de diálogo Implementar no se abrirá al iniciar
cada implementación.
Esta opción también puede seleccionarse en el cuadro de diálogo Implementar.
Mostrar máscara en el Diseñador de Windows Forms
Muestra una máscara alrededor del formulario en tiempo de diseño, siempre que esta opción esté habilitada en el
Propiedades de factor de forma (Cuadro de diálogo, Dispositivos).
Vea también
Referencia
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Implementar (Cuadro de diálogo, Dispositivos)
Dispositivos, Herramientas de dispositivo, Opciones (Cuadro de diálogo)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Clases generadas, Asistente para aplicaciones de Smart Device


MFC
Describe la página Clases generadas del Asistente para aplicaciones de Smart Device MFC.
Esta página muestra los nombres de las clases base y los archivos que genera el proyecto. De manera predeterminada, estos
nombres se basan en el nombre del proyecto que especificó en el cuadro de diálogo Nuevo proyecto. Puede cambiar la
mayoría de los nombres, como se indica a continuación.
Clases generadas
Indica los nombres de las clases creadas para el proyecto. De forma predeterminada, estos nombres se basan en el nombre
del proyecto. El proyecto MFC predeterminado crea una clase CProjNameView, una clase CProjNameApp, una clase
CProjNameDoc y una clase CProjNameMainFrame. Los demás cuadros de esta página reflejan información acerca de la
clase seleccionada actualmente en el cuadro de lista Clases generadas.
Para cambiar un nombre de clase, utilice el cuadro Nombre de clase.
Nombre de la clase
Indica el nombre de la clase seleccionada actualmente en el cuadro de lista Clases generadas. Si el cuadro está activo,
puede cambiar el nombre de la clase. Cuando cambie el foco del cuadro Nombre de clase, cualquier cambio que realice en
el nombre de la clase seleccionada se reflejará en el cuadro de lista Clases generadas.
Archivo .h
Indica el nombre del archivo de encabezado de la clase seleccionada actualmente en el cuadro de lista Clases generadas. Si
el cuadro de texto está activo, puede cambiar el nombre del archivo de encabezado.
Clase base
Indica el nombre de la clase base de la clase seleccionada actualmente en el cuadro de lista Clases generadas. Si el cuadro
está activo, puede seleccionar en la lista otra clase como clase base.
Archivo .cpp
Indica el nombre del archivo de código fuente asociado a la clase seleccionada. Si el cuadro de texto está activo, puede
cambiar el nombre del archivo de implementación.
Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Asistente para controles ActiveX de Smart Device MFC


Describe el Asistente para controles ActiveX de Smart Device MFC
Un control ActiveX es un tipo específico de Automation Servers; es un componente reutilizable. La aplicación que aloja el
control ActiveX es el Automation Clients del control. Si su objetivo es crear un componente reutilizable, debe utilizar este
asistente para crear el control. Vea MFC ActiveX Controls para obtener más información.
Como alternativa, puede crear una aplicación para dispositivos inteligentes MFC de servidor de automatización mediante el
Asistente para aplicaciones de Smart Device MFC.
El programa MFC inicial incluye archivos de código fuente escritos en C++ (.cpp), archivos de recursos (.rc) y un archivo de
proyecto (.vcproj). El código generado en estos archivos iniciales se basa en MFC.
Información general
La página del asistente se describe la configuración actual del proyecto de control ActiveX MFC que está creando. De forma
predeterminada, el asistente crea el proyecto de la manera siguiente:
La plataforma de destino predeterminada para el proyecto es la primera de la lista de plataformas. En una instalación
predeterminada, la plataforma predeterminada es Pocket PC 2003. Al instalar y desinstalar los SDK de Windows CE 5.0
es posible cambiar el destino predeterminado para nuevas aplicaciones u otras plataformas como Smartphone 2003.
El proyecto predeterminado no genera ninguna licencia en tiempo de ejecución.
Este proyecto incluye una clase de control y una clase de página de propiedades cuyos nombres se basan en el nombre
del proyecto.
El control no se basa en ningún control de Windows CE existente y se activa cuando pasa a ser visible, tiene interfaz de
usuario e incluye un cuadro de diálogo Acerca de.
Para cambiar la plataforma de destino, haga clic en Plataformas, en la columna izquierda del asistente, y realice los cambios
que desee.
Para cambiar la configuración de la aplicación, haga clic en Configuración de la aplicación, en la columna izquierda del
asistente, y realice las modificaciones que desee.
Para cambiar los nombres del control, haga clic en Nombres del control, en la columna izquierda del asistente, y realice los
cambios que desee.
Para cambiar la configuración del control, haga clic en Configuración del control, en la columna izquierda del asistente, y
realice los cambios pertinentes.
Tras la creación del nuevo proyecto, si el compilador genera una advertencia para definir
_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, habrá que definir el indicador en cuestión en el archivo de encabezado
principal.

#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA

Este es el caso, sobre todo, de escenarios como la creación de objetos COM en plataformas de Windows Mobile, el consumo de
servicios Web en Windows Mobile y objetos COM ATL.
Vea también
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Asistente para aplicaciones de Smart Device MFC


El Asistente para aplicaciones de Smart Device MFC genera una aplicación con funcionalidad integrada que, al compilarse,
implementa las características básicas de una aplicación ejecutable para Windows CE (.exe).
Información general
La página Información general del Asistente para aplicaciones de Smart Device MFC describe la configuración actual de la
aplicación para dispositivos Smart Device MFC que está creando. De forma predeterminada, el asistente crea el proyecto de la
manera siguiente:
Plataformas
La plataforma de destino predeterminada para el proyecto es la primera de la lista de plataformas. En una instalación
predeterminada, la plataforma predeterminada es Pocket PC 2003, pero la instalación y desinstalación de los SDK de
Windows CE 5.0 puede cambiar el destino predeterminado de nuevas aplicaciones o agregar nuevos destinos como
Smartphone 2003.
Tipo de aplicación
El proyecto se crea con SDI and MDI.
El proyecto utiliza la Document/View Architecture.
El proyecto utiliza MFC en un archivo Archivos DLL compartido.
Cadenas de plantillas de documentos
El proyecto utiliza su nombre para las cadenas de plantillas de documentos predeterminadas.
Características de la interfaz de usuario
El proyecto implementa una barra de comandos.
Características avanzadas
El proyecto no admite ninguna característica avanzada.
Clases generadas
La clase de vista del proyecto se deriva de CView Class.
La clase de aplicación del proyecto se deriva de CWinApp Class.
La clase de documento del proyecto se deriva de CDocument Class.
La clase de marco principal del proyecto se deriva de CFrameWnd Class.
Tras la creación del nuevo proyecto, si el compilador genera una advertencia para definir
_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, habrá que definir el indicador en cuestión en el archivo de encabezado
principal.

#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA

Este es el caso, sobre todo, de escenarios como la creación de objetos COM en plataformas de Windows Mobile, el consumo de
servicios Web en Windows Mobile y objetos COM ATL.
Vea también
Otros recursos
Programar para dispositivos con Visual C++
Desarrollo para Smart Device

Asistente para archivos DLL de Smart Device MFC


Describe el Asistente para archivos DLL de Smart Device MFC, específicamente la página Información general.
Cuando utilice el Asistente para archivos DLL de MFC para crear un proyecto DLL de MFC, obtendrá una aplicación inicial que
funciona, con características de funcionalidad integradas que, al compilar, implementarán las características básicas de un
archivo Archivos DLL. El programa MFC inicial incluye archivos de código fuente escritos en C++ (.cpp), archivos de recursos
(.rc) y un archivo de proyecto (.vcproj). El código generado en estos archivos iniciales se basa en MFC. Para obtener
información más detallada, vea los detalles del archivo en el archivo Readme.txt que se genera para el proyecto en Visual
Studio y en Clases y funciones generadas por el Asistente para archivos DLL de MFC.
Información general
En esta página del asistente se muestra la configuración actual del proyecto DLL de Smart Device MFC. De manera
predeterminada, el proyecto tiene las siguientes opciones establecidas:
La plataforma de destino predeterminada para el proyecto es la primera de la lista de plataformas. En una instalación
predeterminada, la plataforma predeterminada es Pocket PC 2003, pero al instalar y desinstalar los SDK de Windows CE
5.0 puede cambiar el destino predeterminado de las nuevas aplicaciones.
El proyecto se crea como cualquier DLL habitual con MFC vinculado estáticamente.
Para cambiar la plataforma predeterminada, haga clic en Plataformas, en la columna izquierda del asistente, y realice los
cambios que desee.
Para cambiar la configuración predeterminada de la aplicación, haga clic en Configuración de la aplicación, en la columna
izquierda del asistente, y realice los cambios que desee.
Tras la creación del nuevo proyecto, si el compilador genera una advertencia para definir
_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, habrá que definir el indicador en cuestión en el archivo de encabezado
principal.

#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA

Este es el caso, sobre todo, de escenarios como la creación de objetos COM en plataformas de Windows Mobile, el consumo de
servicios Web en Windows Mobile y objetos COM ATL.
Vea también
Otros recursos
Programar para dispositivos con Visual C++
Desarrollo para Smart Device

Carpeta de archivo de resultados (Cuadro de diálogo,


Dispositivos)
Especifica la ubicación del resultado del proyecto en el sistema de archivos del dispositivo.
Para abrir el cuadro de diálogo Carpeta de archivo de resultados, haga clic con el botón secundario del mouse en <nombre
de proyecto> en Explorador de soluciones, haga clic en Propiedades en el menú contextual, seleccione el panel
Dispositivos y, a continuación, haga clic en el botón Puntos suspensivos (…) que aparece a la derecha del cuadro Carpeta
de archivo de resultados.
Ubicación de los resultados en el dispositivo
Especifica el directorio raíz del dispositivo donde se encuentra el directorio de implementación.
Subdirectorio
Especifica el directorio donde se colocará el resultado del proyecto.
Carpeta de archivo de resultados (generada)
Muestra el directorio completo donde se colocará el resultado del proyecto.
Vea también
Otros recursos
Programación para dispositivos con .NET Compact Framework
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Plataformas, Asistente para proyectos ATL de Smart Device


La página Plataformas del Asistente para proyectos ATL de Smart Device especifica las plataformas y conjuntos de
instrucciones que admitirá el nuevo proyecto ATL.
Ventana Plataforma
Especifica las plataformas que el proyecto tiene como objetivo. Las plataformas disponibles o bien se instalan con Visual
Studio 2005, o bien con Kits de desarrollo de software separados (SDKs) de Windows Mobile o Windows CE.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
SDK instalados
Muestra una lista con otras plataformas disponibles como Smartphone 2003 y Pocket PC 2003. Es posible utilizar los
botones para agregar uno o todos a los SDK seleccionados. También es posible utilizar los botones para quitar uno o todos
los SDK seleccionados.
SDK seleccionados
Muestra una lista con las plataformas seleccionadas (establecidas como destino) como Smartphone 2003 y Pocket PC 2003.
Nota
Una vez creado un proyecto, siempre es posible agregar otra plataforma, como Smartphone 2003, tras crear un proyecto de
dispositivos utilizando asistentes para aplicaciones; sin embargo, agregar una nueva plataforma al proyecto tras la creación i
nicial no da como resultado archivos DLL en tiempo de ejecución dependientes que se agreguen a la propiedad de configura
ción Archivos adicionales para la nueva plataforma.

Vea también
Referencia
Asistente para proyectos ATL de Smart Device
Desarrollo para Smart Device

Plataformas, Asistente para controles ActiveX de Smart Device


MFC
La página Plataformas del Asistente para controles ActiveX de Smart Device MFC especifica las plataformas y conjuntos de
instrucciones que admitirá el nuevo proyecto ActiveX.
Ventana Plataforma
Especifica las plataformas que el proyecto tiene como objetivo. Las plataformas disponibles se encuentran instaladas con
Visual Studio 2005 o con los SDK de Windows Mobile o Windows CE por separado.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
SDK instalados
Muestra una lista con otras plataformas disponibles como Smartphone 2003 y Pocket PC 2003. Es posible utilizar los
botones para agregar uno o todos a los SDK seleccionados. También es posible utilizar los botones para quitar uno o todos
los SDK seleccionados.
SDK seleccionados
Muestra una lista con las plataformas seleccionadas o establecidas como destino como Smartphone 2003 y Pocket PC 2003.
Nota
Una vez creado un proyecto, siempre es posible agregar otra plataforma, como Smartphone 2003, tras crear un proyecto de
dispositivo utilizando asistentes para aplicaciones; sin embargo, agregar una nueva plataforma al proyecto tras la creación in
icial no da como resultado archivos DLL en tiempo de ejecución dependientes que se agreguen a la propiedad de configuraci
ón Archivos adicionales para la nueva plataforma.

Vea también
Referencia
Asistente para controles ActiveX de Smart Device MFC
Desarrollo para Smart Device

Plataformas, Asistente para aplicaciones de Smart Device MFC


La página Plataformas del Asistente para aplicaciones de Smart Device MFC especifica las plataformas y conjuntos de
instrucciones que admitirá el nuevo proyecto MFC.
Ventana Plataforma
Especifica las plataformas que el proyecto tiene como objetivo. Las plataformas disponibles se encuentran instaladas con
Visual Studio 2005 o con los SDK de Windows Mobile o Windows CE por separado.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
SDK instalados
Muestra una lista con otras plataformas disponibles como Smartphone 2003 y Pocket PC 2003. Es posible utilizar los
botones para agregar uno o todos a los SDK seleccionados. También es posible utilizar los botones para quitar uno o todos
los SDK seleccionados.
SDK seleccionados
Muestra una lista con las plataformas seleccionadas o establecidas como destino como Smartphone 2003 y Pocket PC 2003.
Nota
Una vez creado un proyecto de dispositivos, siempre se pueden agregar más plataformas como Smartphone 2003, tras la cr
eación inicial; no obstante, agregar una nueva plataforma al proyecto tras la creación inicial no agrega DLL adicionales y dep
endientes en tiempo de ejecución a la propiedad config de los Archivos adicionales para la plataforma agregada.

Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Plataformas, Asistente para archivos DLL de Smart Device MFC


La página Plataformas del Asistente para archivos DLL de Smart Device MFC especifica las plataformas y conjuntos de
instrucciones que admitirá el nuevo proyecto DLL de Smart Device MFC.
Ventana Plataforma
Especifica las plataformas que el proyecto tiene como objetivo. Las plataformas disponibles se encuentran instaladas con
Visual Studio 2005 o con los SDK de Windows Mobile o Windows CE por separado.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
SDK instalados
Muestra una lista con otras plataformas disponibles como Smartphone 2003 y Pocket PC 2003. Es posible utilizar los
botones para agregar uno o todos a los SDK seleccionados. También es posible utilizar los botones para quitar uno o todos
de los SDK seleccionados.
SDK seleccionados
Muestra una lista con las plataformas seleccionadas o establecidas como destino como Smartphone 2003 y Pocket PC 2003.
Nota
Una vez creado un proyecto, siempre es posible agregar otra plataforma, como Smartphone 2003, tras crear un proyecto de
dispositivo utilizando asistentes para aplicaciones; sin embargo, agregar una nueva plataforma al proyecto tras la creación in
icial no da como resultado archivos DLL en tiempo de ejecución dependientes que se agreguen a la propiedad de configuraci
ón Archivos adicionales para la nueva plataforma.

Vea también
Referencia
Asistente para archivos DLL de Smart Device MFC
Desarrollo para Smart Device

Plataformas, Asistente para proyectos Win32 para Smart Device


La página Plataformas del Asistente para aplicaciones para Windows CE especifica las plataformas y conjuntos de
instrucciones que admitirá el nuevo proyecto de Windows CE.
Ventana Plataforma
Especifica las plataformas que el proyecto tiene como objetivo. Las plataformas disponibles se encuentran instaladas con
Visual Studio 2005 o con los SDK de Windows Mobile o Windows CE por separado.
Conjuntos de instrucciones y panel de dispositivos
Muestra los conjuntos de instrucciones compatibles y dispositivos para la plataforma seleccionada en la ventana
Plataforma.
SDK instalados
Muestra una lista con otras plataformas disponibles como Smartphone 2003 y Pocket PC 2003. Es posible utilizar los
botones para agregar uno o todos a los SDK seleccionados. También es posible utilizar los botones para quitar uno o todos
de los SDK seleccionados.
SDK seleccionados
Muestra una lista con las plataformas seleccionadas o establecidas como destino como Smartphone 2003 y Pocket PC 2003.
Nota Una vez creado un proyecto de dispositivos, siempre se pueden agregar más plataformas como Smartphone 2003, tras
la creación inicial; no obstante, agregar una nueva plataforma al proyecto tras la creación inicial no agrega DLL adicionales y
dependientes en tiempo de ejecución a la propiedad de configuración de los Archivos adicionales para la plataforma
agregada.
Vea también
Referencia
Asistente para proyectos Win32 para Smart Device
Desarrollo para Smart Device

Propiedades (Ventana), Proyecto Cab de Smart Device


Utilice la ventana Propiedades con el fin de especificar propiedades para proyectos CAB de Smart Device.
Para abrir esta ventana, seleccione el proyecto CAB de Smart Device en el Explorador de soluciones y, a continuación, en el
menú Ver, haga clic en Ventana Propiedades.
DLL de instalación de CE
Especifica el archivo DLL de instalación de Windows CE que se utilizará para este archivo .cab. Setup.dll es un archivo
opcional que realiza operaciones personalizadas durante la instalación y desinstalación de la aplicación en cuestión. Para
obtener más información, vea Información general sobre el empaquetado de soluciones para dispositivos.
Compress
Especifica si se debe comprimir el archivo .cab.
No todos los SDK admiten archivos .cab comprimidos. Por ejemplo, no se admite Pocket PC 2003. Para obtener más
información, consulte la documentación del SDK.
Manufacturer
Especifica el nombre del fabricante de una aplicación o componente.
NoUninstall
Especifica si se puede desinstalar o no este archivo .cab. Esta opción se utiliza para Compact Framework 2.0 y posterior.
OSVersionMax
Especifica el número de versión de sistema operativo máximo en el que se puede instalar el archivo .cab.
OSVersionMin
Especifica el número de versión de sistema operativo mínimo en el que se puede instalar el archivo .cab.
ProductName
Especifica un nombre público que describe una aplicación o componente. También se conoce como Nombre de la aplicación.
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Propiedades (Ventana), Proyectos administrados de Smart


Device
Utilice esta ventana para especificar las propiedades para los proyectos administrados de Smart Device. Las propiedades que
aparecen en esta Ventana Propiedades pero que no se enumeran aquí son comunes con las del escritorio.
Para abrir la ventana, seleccione el proyecto de Smart Device en el Explorador de soluciones y, a continuación, en el menú
Ver, haga clic en Ventana Propiedades.
Carpeta del archivo de resultados
Carpeta del dispositivo remoto en la que se debe colocar la aplicación.
Plataforma
Plataforma a la que se dirige la aplicación.
Dispositivo de destino
Dispositivo remoto o emulador a los que se dirige la aplicación.
Versión de Framework
Versión de .NET Compact Framework a la que se dirige este proyecto.
Vea también
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Seleccionar certificado (Cuadro de diálogo, Dispositivos)


Proporciona medios con el fin de especificar certificados para firmar aplicaciones de dispositivos. También actúa como portal
de acceso al cuadro de diálogo Administrar certificados y al Asistente para importación de certificados.
Para obtener más información, vea Cómo: Importar y aplicar certificados en proyectos de dispositivos.
Panel Certificado
Muestra los certificados disponibles.
Administrar certificados
Abre el cuadro de diálogo Administrar certificados, donde puede importar los nuevos certificados. También ofrece
información y opciones adicionales, como entidades emisoras de certificados intermedias, entidades emisoras de certificados
raíz de confianza y editores de confianza y que no son de confianza.
Vea también
Conceptos
Información general sobre seguridad (Dispositivos)
Otros recursos
Referencia de la interfaz de usuario para dispositivos
Desarrollo para Smart Device

Características de la interfaz de usuario, Asistente para


aplicaciones de Smart Device MFC
Esta página proporciona las opciones que permiten definir la apariencia de la aplicación. Las características de la interfaz de
usuario disponibles para el proyecto dependen del tipo de aplicación que haya especificado en la página Tipo de aplicación del
Asistente para aplicaciones MFC.
Barra de comandos
Especifica los detalles de la barra de comandos de la aplicación.
Option Description
Sólo menús Agrega una barra de comandos básica a la aplicación.

Menús y botones Agrega una barra de comandos básica con botones.

Barra de estado
Esta característica no se admite en esta versión.
Implementa una barra de controles con una fila de paneles de salida de texto. No está disponible para tipos de aplicación
basados en cuadros de diálogo.
Título del cuadro de diálogo
Para aplicaciones basadas únicamente en CDialog, este título aparecerá en la barra de título del cuadro de diálogo. Para
modificar este campo, la opción Basada en cuadros de diálogo de Tipo de aplicación debe estar seleccionada. Para obtener
más información, vea Tipo de aplicación, Asistente para aplicaciones de Smart Device MFC.
Vea también
Referencia
Asistente para aplicaciones de Smart Device MFC
Desarrollo para Smart Device

Asistente para proyectos Win32 para Smart Device


El Asistente para proyectos Win32 para Smart Device le permite crear uno de los cuatro tipos de proyectos para el sistema
operativo Windows CE. En cada caso, puede especificar opciones adicionales apropiadas para el tipo de proyecto que vaya a
abrir.
Información general
En esta página del asistente se muestra la configuración del proyecto actual para el proyecto de Windows CE que está creando.
De manera predeterminada, el proyecto tiene la siguiente configuración:
La plataforma de destino predeterminada para el proyecto es la primera de la lista de plataformas. En una instalación
predeterminada, la plataforma predeterminada es Pocket PC 2003, mediante la instalación y desinstalación de los SDK de
Windows CE 5.0 es posible cambiar el destino predeterminado de nuevas aplicaciones.
El proyecto es una aplicación para Windows. Una aplicación para Windows se define como un proyecto que incluye un
archivo .cpp y que contiene una función WinMain.
El proyecto no está vacío.
El proyecto no contiene símbolos para exportar.
El proyecto no utiliza un encabezado precompilado.
El proyecto no incluye compatibilidad con MFC o ATL.
Para cambiar la plataforma predeterminada, haga clic en Plataformas, en la columna izquierda del asistente, y realice los
cambios que desee.
Para cambiar otros valores predeterminados, haga clic en Configuración de la aplicación, en la columna izquierda del asistente,
y realice los cambios que desee.
Tras la creación del nuevo proyecto, si el compilador genera una advertencia para definir
_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, habrá que definir el indicador en cuestión en el archivo de encabezado
principal.

#define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA

Este es el caso, sobre todo, de escenarios como la creación de objetos COM en plataformas de Windows Mobile, el consumo de
servicios Web en Windows Mobile y objetos COM ATL.
Vea también
Otros recursos
Crear y trasladar proyectos de dispositivos de Visual C++
Desarrollo para Smart Device

Referencia del lenguaje Visual Basic para dispositivos


Los elementos de programación del lenguaje Visual Basic disponibles para los desarrolladores de aplicaciones para
dispositivos no son exactamente los mismos cuando tienen como destino .NET Compact Framework. La Referencia de Visual
Basic tiene en cuenta esos elementos que no se admiten en el desarrollo de aplicaciones para dispositivos. Para obtener más
información, vea Diferencias respecto al desarrollo para escritorio en .NET Compact Framework.
Lo nuevo
Los elementos de programación siguientes son nuevos para los desarrolladores de aplicaciones para dispositivos en Visual
Studio 2005:
AudioPlayMode (Enumeración)
SByte (Tipo de datos, Visual Basic), UInteger (Tipo de datos), ULong (Tipo de datos, Visual Basic) y UShort (Tipo de datos,
Visual Basic)
TextFieldParser (Objeto)
IsNot (Operador)
Elementos admitidos
Se admiten los elementos de programación siguientes:
Todos los tipos de datos, directivas, métodos, objetos, operadores e instrucciones de Visual Basic.
Los atributos, constantes y enumeraciones, funciones, palabras clave y propiedades que no figuran en las secciones
siguientes como elementos no admitidos.
Elementos no admitidos
Ciertos elementos de programación del lenguaje Visual Basic no están disponibles cuando tienen como destino .NET Compact
Framework. En los párrafos siguientes se resumen los elementos de programación no admitidos en el desarrollo de
aplicaciones para dispositivos inteligentes:
Atributos
VBFixedStringAttribute (Clase)
Constantes y enumeraciones
FileAttribute (Enumeración), CallType (Enumeración), VbStrConv (Enumeración) y VariantType (Enumeración).
Funciones
AppActivate (Función), Beep (Función), CallByName (Función), ChDir (Función), ChDrive (Función), CreateObject (Función,
Visual Basic), CurDir (Función), DeleteSetting (Función), Dir (Función), Environ (Función), EOF (Función), FileAttr (Función),
FileClose (Función), FileCopy (Función), FileDateTime (Función), FileGet (Función), FileGetObject (Función), FileLen (Función),
FileOpen (Función), FilePut (Función), FilePutObject (Función), FileWidth (Función), FreeFile (Función), GetAllSettings (Función),
GetAttr (Función), GetObject (Función, Visual Basic), GetSetting (Función), Input (Función), InputString (Función), Kill (Función),
LineInput (Función), Loc (Función), Lock, Unlock (Funciones), LOF (Función), MkDir (Función), Print, PrintLine (Funciones),
Rename (Función), Reset (Función), RmDir (Función), SaveSetting (Función), Seek (Función), SetAttr (Función), Shell (Función),
SPC (Función), StrConv (Función), TAB (Función), Lock, Unlock (Funciones), VarType (Función, Visual Basic), Write, WriteLine
(Funciones).
Palabras clave
Ansi, Auto, End (Visual Basic) y Unicode (Visual Basic).
Propiedades
LastDllError (Propiedad, objeto Err), ScriptEngine (Propiedad), ScriptEngineBuildVersion (Propiedad), ScriptEngineMajorVersion
(Propiedad) y ScriptEngineMinorVersion (Propiedad).
Elementos admitidos parcialmente
Puede utilizar las propiedades siguientes para obtener, pero no establecer, la fecha y la hora: Today (Propiedad), TimeOfDay
(Propiedad), DateString (Propiedad) y TimeString (Propiedad).
Vea también
Conceptos
Diferencias respecto al desarrollo para escritorio en .NET Compact Framework
Otros recursos
Programación para dispositivos con .NET Compact Framework
Referencia de Visual Basic
Referencia (dispositivos)
Desarrollo para Smart Device

Mensajes de error (Dispositivos)


Algunos mensajes de error son únicos en el desarrollo de dispositivos inteligentes y se incluyen los siguientes:
En esta sección
No se puede agregar una referencia a <Nombre>.
No se puede cargar la máscara (Dispositivos)
Error al recuperar la información del almacén de datos del usuario (Dispositivos)
Error genérico de implementación (Dispositivos)
Los proyectos destinados a .NET Compact Framework 1.0 requieren la versión 1.1 de .NET Framework, que no se encuentra en
este equipo
Nombre del archivo de resultados no válido (Proyecto Cab de dispositivos)
Reinicie el dispositivo antes de utilizarlo con el nuevo transporte
La herencia visual está actualmente deshabilitada
Vea también
Otros recursos
Referencia (dispositivos)
Desarrollo para Smart Device

No se puede agregar una referencia a <Nombre>.


A reference to <Name> could not be added
El destino del proyecto que está intentando cargar es una plataforma de dispositivo que la configuración de Visual Studio no
admite.
Para corregir este error
Instale una plataforma que sea compatible con el proyecto que desea cargar.
Por ejemplo, si está intentando cargar un proyecto de Windows Mobile 5.0 y no tiene instalado Windows Mobile 5.0 SDK,
instale Windows Mobile 5.0 SDK.
Vea también
Otros recursos
Mensajes de error (Dispositivos)
Desarrollo para Smart Device

No se puede cargar la máscara (Dispositivos)


Cannot load skin (Devices)
Al seleccionar un archivo en el cuadro Máscara del cuadro de diálogo Propiedades del factor de forma pueden producirse
los siguientes errores.
Mensaje Causas típicas
No se puede cargar la máscara; el archivo XML n Nombre de archivo o ruta de acceso incorrecta; realmente no es un arch
o se puede abrir ivo XML; archivo bloqueado por otro proceso; privilegios de usuario ins
uficientes.

No se puede cargar la máscara; el archivo de imá Cualquier opción de las anteriores; la imagen no tiene formato BMP o P
genes al que hace referencia el archivo XML no s NG, los únicos formatos de imágenes que se admiten; el archivo de imá
e puede abrir genes está dañado.

No se puede cargar la máscara; el archivo XML n Para revisar los detalles de esquema de máscara válidos, vea el menú A
o contiene un esquema de máscara válido yuda en el emulador de dispositivos.

Para corregir este error


1. Haga clic en Aceptar para descartar el cuadro de mensaje de error.
2. En el cuadro de diálogo Propiedades del factor de forma, seleccione un archivo de máscara válido.
Vea también
Referencia
Propiedades de factor de forma (Cuadro de diálogo, Dispositivos)
Desarrollo para Smart Device

Error al recuperar la información del almacén de datos del


usuario (Dispositivos)
Error retrieving information from user datastore (Devices)
Este error se produce cuando el almacén de datos se ha dañado. Para volver a crear tal almacén de datos, el usuario debería
borrar el almacén de datos en cuestión y volver a abrir una solución siguiendo los pasos que se detallan a continuación.
Precaución
Este proceso borra cualquier elemento personalizado que se haya agregado al almacén de datos, como dispositivos copiados
desde un dispositivo existente, propiedades de configuración del emulador, etcétera.

Para borrar el almacén de datos y volver a abrir la solución


1. Guarde su trabajo y, a continuación, cierre cualquier herramienta remota y Visual Studio.
2. Borre todo el contenido del directorio Corecon.
Dicho directorio se encuentra en %USERPROFILE%\Configuración local\Datos de programa\Microsoft.
Por ejemplo: del Documents and Settings\myname\Local Settings\Application Data\Microsoft\Corecon\*.*.

3. Vuelva a abrir Visual Studio.


Se ha creado un nuevo almacén de datos.
Vea también
Otros recursos
Mensajes de error (Dispositivos)
Desarrollo para Smart Device

Error genérico de implementación (Dispositivos)


Generic deployment failure (Devices)
Aparece este mensaje de error cuando no hay ninguna información específica que esté disponible para identificar la naturaleza
del error de implementación. La mayoría de los errores de implementación generan información específica. Este mensaje
general aparece en pocas ocasiones.
Vea también
Otros recursos
Mensajes de error de Visual Studio
Desarrollo para Smart Device

Los proyectos destinados a .NET Compact Framework 1.0


requieren la versión 1.1 de .NET Framework, que no se
encuentra en este equipo
Projects targeting .NET Compact Framework 1.0 require version 1.1 of the .NET Framework, which is not detected on this
machine
Los proyectos de Visual Studio 2005 destinados a .NET Compact Framework versión 1.0 requieren la versión 1.1 de .NET
Framework (escritorio). Los proyectos de Smartphone 2003 entran dentro de esta categoría.
La versión 1.1 de .NET Framework no se detectó en el equipo de desarrollo.
Para instalar la versión 1.1 de .NET Framework
Descargue e instale la versión 1.1 de .NET Framework.
Las instrucciones están disponibles en http://msdn.microsoft.com/netframework/technologyinfo/howtoget/default.aspx
Vea también
Conceptos
Capacidades de dispositivos y herramientas de desarrollo necesarias
Otros recursos
Mensajes de error (Dispositivos)
Desarrollo para Smart Device

Nombre del archivo de resultados no válido (Proyecto Cab de


dispositivos)
Invalid output file name (Device Cab Project)
Este error se produce cuando el nombre del archivo de resultados de un proyecto CAB no cumple los requisitos de
denominación.
Para corregir este error
Cambie el nombre del archivo de resultados utilizando caracteres válidos y una extensión .cab.
Vea también
Otros recursos
Empaquetar soluciones de dispositivos para su implementación
Mensajes de error (Dispositivos)
Desarrollo para Smart Device

Reinicie el dispositivo antes de utilizarlo con el nuevo


transporte
Reset the device before using it with the new transport
Esta advertencia se produce cuando se cambia el transporte de una conexión existente entre el equipo de desarrollo y un
dispositivo (por ejemplo, cambiar el transporte del emulador de dispositivos de DMA a TCP/IP).
Para asegurarse de que los componentes de escritorio y de dispositivos están utilizando el mismo protocolo, restablezca el
dispositivo. Llegados a ese punto, el escritorio establece una nueva conexión con el protocolo adecuado.
Para restablecer el emulador de dispositivos
En el menú Archivo del emulador de dispositivos, seleccione Restablecer y, a continuación, haga clic en Software o
Hardware.
Es suficiente con el restablecimiento del software.
O bien
En la ventana Emuladores disponibles del Administrador del emulador de dispositivos, haga clic con el botón
secundario del mouse en el emulador activo y, a continuación, en el menú contextual, haga clic en Restablecer.
Para restablecer un dispositivo físico
Siga las instrucciones del fabricante.
Vea también
Referencia
Propiedades de dispositivo (Cuadro de diálogo)
Otros recursos
Conectar Smart Devices a equipos de desarrollo
Desarrollo para Smart Device

La herencia visual está actualmente deshabilitada


Visual Inheritance is Currently Disabled
El texto completo de este mensaje es:
En estos momentos está deshabilitada la herencia visual porque el control base tiene un control específico del dispositivo.
Este mensaje puede aparecer en proyectos administrados si un control o un formulario de base tiene un control o un
componente específico del dispositivo.
Esta situación puede darse en los siguientes casos:
Si el elemento primario de un formulario o de un control de usuario heredado contiene un control específico del
dispositivo. En este caso, no se puede ver el diseñador del formulario o del control de usuario heredado.
Los formularios o controles de usuario contienen un control específico del dispositivo y se hereda de otro formulario o
control de usuario. En este caso, no se puede ver el diseñador del formulario o del control de usuario heredado.
El proyecto contiene referencias a ensamblados específicos del dispositivo, como Microsoft.WindowsCE.Forms.dll.
El proyecto, o un ensamblado al que se haga referencia en éste, incluye la invocación de la plataforma. Si está seguro de
que la invocación de la plataforma no se ejecutará durante el tiempo de diseño, puede habilitar de un modo seguro la
herencia visual colocando un atributo DesktopCompatible(true) en el formulario principal o en el control de usuario
principal.
Vea también
Otros recursos
Mensajes de error (Dispositivos)
Programación para dispositivos con .NET Compact Framework

También podría gustarte