Известные проблемы с переносом из eMbedded Visual C++
Обновлен: Ноябрь 2007
Несколько средств и ресурсов C++ доступны для преобразования существующих проектов eMbedded Visual C++ в проекты Visual Studio. Дополнительные сведения см. в разделе Мастер обновления eMbedded Visual C++ до Visual Studio.
Библиотека ATL, классы MFC и стандартные библиотеки C++ были обновлены и изменены с момента представления eMbedded Visual C++. Список неподдерживаемых классов см. в разделе Список классов eVC, не поддерживаемых в классах MFC с версии 3.0 по версию 9.0. Код, в котором вызываются эти классы, должны быть изменены для компиляции в Visual Studio. Приведенные ниже неполадки, как правило, происходят при переносе проектов из eMbedded Visual C++.
Проблема |
Описание и разрешение |
---|---|
Метод CCeSocket::OnReceive() не вызывается в классах MFC на устройствах, более новых чем Windows CE 3.0. |
Решение описано в статье базы знаний справки и поддержки, посвященной отсутствию вызова CCeSocket OnReceive() для принятых сокетов данных sockets (может быть на английском языке). |
Однако класс CArchive Class не поддерживается. |
Многие проекты eMbedded Visual C++ содержат ссылки на класс CArchive Class. Чтобы устранить эту неполадку, необходимо удалить ссылки на класс CArchive. |
Определенные классы коллекций, такие как CObArray, CMapPtrToPtr и другие, реализованы в Windows CE 5.0 с помощью шаблонных версий CArray<>, CMap<> и так далее. В библиотеках eMbedded Visual C++ версии 4.0 и C++ настольных ПК эти типы реализованы как регулярные, нешаблонные классы. Поэтому вызов IMPLEMENT_SERIAL для этих шаблонных классов приводит к ошибке при компиляции: ошибка C2039: 'classCObArray' не является элементом 'CArray<TYPE,ARG_TYPE>' ошибка C2065: 'classCObArray' : необъявленный идентификатор |
Чтобы разрешить это различие в реализации, измените макрос IMPLEMENT_SERIAL для использования CObject вместо CObArray, CMapPtrToPtr и пр. Другими словами, не составляйте подобный код: IMPLEMENT_SERIAL(CYourClass, CObArray, 0) Вместо этого используйте: IMPLEMENT_SERIAL(CYourClass, CObject, 0) |
По умолчанию в eMbedded Visual C++ версии 4.0 задается стиль диалогов как DS_MODALFRAME для приложений Pocket PC MFC. В MFC 9.0 этот стиль не поддерживается.
Примеры
В этом разделе приводятся некоторые частые ошибки, которые могут возникнуть при переносе проекта из eMbedded Visual C++ в Visual Studio. Дополнительные сведения см. в статье, посвященной переносу проектов Microsoft eMbedded Visual C++ в Visual Studio 2005 (может быть на английском языке).
Ошибка при компиляции: не удалось включить файл 'wceres.rc'
Щелкните правой кнопкой мыши файл ресурса проекта, выберите команду Перейти к коду и закомментируйте следующую строку:
//#include "wceres.rc"
NUM_TOOL_TIP не определен
В файле заголовка определите #define _WIN32_WCE_PSPC для конфигураций Pocket PC и _WIN32_WCE_WFSP для конфигураций смартфона.
Не удалось открыть файл OLDNAMES.lib
В окне Обозреватель решений щелкните правой кнопкой мыши файл проекта и выберите команду Свойства.
Щелкните Компоновщик. Измените свойство Игнорировать указанную библиотеку путем добавления OLDNAMES.LIB.
Неоднозначная перегрузка
Стандартная библиотека C++ и библиотека ATL имеют интерфейсы API, которые также содержатся в пакете SDK устройства. Устранить неоднозначность можно с помощью пространства имен, например ::.
Конфликт между типом компьютера модуля 'THUMB' и типом конечного компьютера 'ARM
В окне Обозреватель решений щелкните правой кнопкой мыши файл проекта и выберите команду Свойства.
В разделе Свойства конфигурации разверните узел Компоновщик и щелкните свойство Командная строка. Удалите переключатель /MACHINE:THUMB из командной строки для каждой конфигурации Windows Mobile 5.0 на страницах Свойство.
Строка ресурса не отделена должным образом
Может возникнуть проблема неправильного разделения строк ресурсов в перенесенных приложениях. В окне Обозреватель решений щелкните правой кнопкой мыши файл проекта и выберите команду Свойства. В разделе Свойства конфигурации разверните узел Ресурсы и щелкните свойство Командная строка. Добавьте переключатель -n в командную строку компилятора ресурсов.
Ошибка "BEGIN ожидалось в диалоговом окне"
Как правило, эта ошибка следует за ошибками "Файл не найден", например "файл не найден: 0x1". Перейдите к RC-файлу, который указан в ошибке, и измените код для использования инструкции #ifdef вокруг объявления FONT, как показано в следующем примере кода.
Исходный код:
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
Измененный код:
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
См. также
Основные понятия
Мастер обновления eMbedded Visual C++ до Visual Studio
Другие ресурсы
Вопросы и ответы по переносу приложений для мобильных платформ для разработчиков