Problemas conocidos con el traslado desde eMbedded Visual C++
Actualización: noviembre 2007
Hay una serie de recursos y herramientas de C++ que proporcionan ayuda para convertir los proyectos de Embedded Visual C++ existentes a Visual Studio. Para obtener más información, vea Asistente para actualización de eMbedded Visual C++ a Visual Studio.
A partir de la introducción de eMbedded Visual C++ se han actualizado las bibliotecas Active Template Library (ATL) y Microsoft Foundation Classes (MFC), y la biblioteca estándar de C++. Para obtener una lista de las clases no compatibles, vea Lista de clases de eVC no admitidas de MFC 3.0 a 9.0. El código que llama a estas clases tiene que modificarse para poder compilarlo en Visual Studio. Los problemas siguientes se producen generalmente durante el traslado desde EMbedded Visual C++.
Problema |
Descripción/resolución |
---|---|
No se llama al método CCeSocket::OnReceive() en MFC para los dispositivos más modernos que Windows CE 3.0. |
La solución se trata en el artículo de Ayuda y Soporte técnico de Microsoft Knowledge Base: Bug: CCeSocket OnReceive() does not get called for accepted data sockets. |
No se admite la clase CArchive Class. |
Muchos proyectos EMbedded Visual C++ contienen referencias a la clase CArchive Class. Para resolver este problema, debe quitar las referencias a CArchive. |
Algunas clases de colección, como CObArray, CMapPtrToPtr, etc., se implementan en Windows CE 5.0 mediante versiones con plantilla de CArray<>, CMap<>, etc. En las bibliotecas de Embedded Visual C++ versión 4.0 y de C++ para escritorio, estos tipos se implementan como clases normales sin plantilla. Por tanto, al llamar a IMPLEMENT_SERIAL en estas clases con plantilla se produce un error de compilación: error C2039: 'classCObArray': no es un miembro de 'CArray <TYPE, ARG_TYPE>' error C2065: 'classCObArray': identificador no declarado |
Para resolver esta diferencia en la implementación, cambie la macro IMPLEMENT_SERIAL para que utilice CObject en lugar de CObArray, CMapPtrToPtr, etc. Es decir, no escriba esto: IMPLEMENT_SERIAL(CYourClass, CObArray, 0) Utilice en su lugar: IMPLEMENT_SERIAL(CYourClass, CObject, 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 9.0, este estilo no se admite.
Ejemplos
En esta sección se explican algunos de los errores más comunes que podría encontrar al migrar un proyecto de eMbedded Visual C++ a Visual Studio. Para obtener más información, vea 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 de proyecto y, a continuación, haga clic en 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 de proyecto y, a continuación, haga clic en 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 recursos 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 de proyecto y, a continuación, haga clic en Propiedades. En Propiedades de configuración, expanda Recursos y, a continuación, haga clic en 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 modifique el código para que use 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