Partager via


Problèmes connus de portage à partir d'eMbedded Visual C++

Mise à jour : novembre 2007

De nombreux outils et ressources C++ sont disponibles pour vous aider à convertir vos projets eMbedded Visual C++ existants en Visual Studio. Pour plus d'informations, consultez Assistant Mise à niveau d'eMbedded Visual C++ vers Visual Studio.

Les bibliothèques ATL (Active Template Library), MFC (Microsoft Foundation Classes) et C++ standard ont été mises à jour et modifiées depuis l'introduction d'eMbedded Visual C++. Pour obtenir la liste des classes non prises en charge, consultez Liste des classes eVC non prises en charge de MFC 3.0 à 9.0. Le code qui appelle ces classes doit être modifié pour être compilé dans Visual Studio. Les problèmes suivants se produisent généralement lorsque vous effectuez un portage à partir d'eMbedded Visual C++.

Problème

Description/résolution

La méthode CCeSocket::OnReceive() n'est pas appelée dans les versions de MFC for Devices ultérieures à Windows CE 3.0.

La résolution est abordée dans l'article de Base de connaissances d'aide et de support : Bug: CCeSocket OnReceive() n'est pas appelée pour les sockets de données acceptés (en anglais)

La classe CArchive (voir CArchive Class) n'est pas prise en charge.

De nombreux projets eMbedded Visual C++ contiennent des références à la classe CArchive (voir CArchive Class). Pour résoudre ce problème, vous devez supprimer les références à CArchive.

Certaines classes de collection, telles que CObArray, CMapPtrToPtr, etc., sont implémentées dans Windows CE 5.0 à l'aide de versions basées sur un modèle de CArray<>, CMap<>, etc. Dans eMbedded Visual C++ version 4.0 et dans les bibliothèques C++ bureautiques, ces types sont implémentés en tant que classes normales, non basées sur un modèle. Par conséquent, l'appel de IMPLEMENT_SERIAL sur ces classes basées sur un modèle entraîne une erreur de compilation :

erreur C2039 : 'classCObArray' : n'est pas un membre de 'CArray<TYPE,ARG_TYPE>'

erreur C2065 : 'classCObArray' : identificateur non déclaré

Pour résoudre ce problème de différence d'implémentation, modifiez votre macro IMPLEMENT_SERIAL afin d'utiliser CObject au lieu de CObArray, CMapPtrToPtr, etc.

En d'autres termes, n'écrivez pas ceci :

IMPLEMENT_SERIAL(CYourClass, CObArray, 0)

Utilisez à la place :

IMPLEMENT_SERIAL(CYourClass, CObject, 0)

Par défaut, eMbedded Visual C++ version 4.0 affecte le style de boîte de dialogue DS_MODALFRAME aux applications Pocket PC MFC. Dans MFC 9.0, ce style n'est pas pris en charge.

Exemples

Cette section esquisse certaines des erreurs les plus courantes que vous pouvez rencontrer lorsque vous effectuez une migration de votre projet eMbedded Visual C++ vers Visual Studio. Pour plus d'informations, consultez Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005.

  • Erreur de compilation : impossible d'ouvrir le fichier Include 'wceres.rc'

    Cliquez avec le bouton droit sur le fichier de ressources du projet (RC), sélectionnez Afficher le code, puis commentez la ligne suivante :

    //#include "wceres.rc"
    
  • NUM_TOOL_TIP non défini

    Dans votre fichier d'en-tête, définissez #define _WIN32_WCE_PSPC pour vos configurations Pocket PC et _WIN32_WCE_WFSP pour vos configurations Smartphone.

  • Impossible d'ouvrir le fichier OLDNAMES.lib

    Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier projet, puis cliquez sur Propriétés.

    Cliquez sur Éditeur de liens. Modifiez la propriété Bibliothèque spécifique ignorée en ajoutant OLDNAMES.LIB.

  • Surcharge ambiguë

    Les bibliothèques SCL (Standard C++ Library) et ATL ont des API qui existent également dans le Kit de développement Smart Device. Levez l'ambiguïté avec un espace de noms, tel que ::.

  • Le type d'ordinateurs module 'THUMB' est en conflit avec le type d'ordinateurs cible 'ARM

    Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier projet, puis cliquez sur Propriétés.

    Sous Propriétés de configuration, développez Éditeur de liens, puis cliquez sur la propriété Ligne de commande. Supprimez le commutateur /MACHINE:THUMB à partir de la ligne de commande pour chaque configuration Windows Mobile 5.0 dans les pages Propriété.

  • La chaîne de ressource n'est pas séparée correctement

    Vous pouvez rencontrer un problème là où les chaînes de ressources provenant d'applications portées ne sont pas séparées correctement. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier projet, puis cliquez sur Propriétés. Sous Propriétés de configuration, développez Ressources, puis cliquez sur la propriété Ligne de commande. Ajoutez un commutateur -n à la ligne de commande du compilateur de ressources.

  • Erreur BEGIN attendue dans la boîte de dialogue

    Cette erreur est suivie habituellement par des erreurs Fichier introuvable, telles que "fichier introuvable : 0x1". Accédez au fichier RC qui est indiqué par l'erreur et modifiez le code pour utiliser une instruction #ifdef autour de la déclaration FONT comme indiqué dans l'exemple de code suivant.

    Code d'origine :

    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
    

    Code modifié :

    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
    

Voir aussi

Concepts

Assistant Mise à niveau d'eMbedded Visual C++ vers Visual Studio

Autres ressources

Forum Aux Questions sur la migration de plateforme Windows Mobile pour les développeurs (en anglais)