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)