Поделиться через


Известные проблемы с переносом из 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

Другие ресурсы

Вопросы и ответы по переносу приложений для мобильных платформ для разработчиков