다음을 통해 공유


eMbedded Visual C++ 이식 관련 알려진 문제

업데이트: 2007년 11월

다양한 C++ 도구 및 리소스를 사용하여 기존 eMbedded Visual C++ 프로젝트를 Visual Studio로 변환할 수 있습니다. 자세한 내용은 eMbedded Visual C++를 Visual Studio로 업그레이드 마법사를 참조하십시오.

eMbedded Visual C++가 소개된 이후 ATL(Active Template Library), MFC(Microsoft Foundation Classes) 및 표준 C++ 라이브러리가 업데이트 및 변경되었습니다. 지원되지 않는 클래스 목록은 MFC 9.0에서 지원되지 않는 MFC 3.0 eVC 클래스 목록을 참조하십시오. 이러한 클래스를 호출하는 코드는 수정해야만 Visual Studio에서 컴파일할 수 있습니다. eMbedded Visual C++에서 이식할 때 일반적으로 발생하는 문제는 다음과 같습니다.

문제

설명/해결 방법

Windows CE 3.0 이후 버전의 장치에 대해서는 MFC에서 CCeSocket::OnReceive() 메서드를 호출할 수 없습니다.

해결 방법은 도움말 및 지원 센터의 기술 자료 문서 Bug: CCeSocket OnReceive() does not get called for accepted data 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': 선언되지 않은 식별자입니다.

구현 시 이 차이를 해결하려면 CObArray, CMapPtrToPtr 등 대신 CObject를 사용하도록 IMPLEMENT_SERIAL 매크로를 변경합니다.

즉, 다음과 같이 작성하지 않도록 합니다.

IMPLEMENT_SERIAL(CYourClass, CObArray, 0)

대신 다음을 사용합니다.

IMPLEMENT_SERIAL(CYourClass, CObject, 0)

eMbedded Visual C++ 버전 4.0에서는 기본적으로 대화 상자 스타일을 MFC Pocket PC 응용 프로그램용 DS_MODALFRAME으로 설정합니다. MFC 9.0에서는 이 스타일이 지원되지 않습니다.

예제

이 단원에서는 eMbedded Visual C++에서 Visual Studio로 프로젝트를 마이그레이션할 때 발생할 수 있는 몇 가지 일반적인 오류에 대해 간단하게 설명합니다. 자세한 내용은 Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005를 참조하십시오.

  • 컴파일 오류. 포함 파일 'wceres.rc'를 열 수 없습니다.

    프로젝트 리소스(RC) 파일을 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭한 후 다음 줄을 주석으로 처리합니다.

    //#include "wceres.rc"
    
  • NUM_TOOL_TIP이 정의되지 않았습니다.

    헤더 파일에서 Pocket PC 구성으로 #define _WIN32_WCE_PSPC를 정의하고 Smartphone 구성으로 _WIN32_WCE_WFSP를 정의합니다.

  • OLDNAMES.lib 파일을 열 수 없습니다.

    솔루션 탐색기에서 프로젝트 파일을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

    링커를 클릭합니다. OLDNAMES.LIB를 추가하여 특정 라이브러리 무시 속성을 편집합니다.

  • 오버로드가 모호합니다.

    SCL(표준 C++ 라이브러리)과 ATL에는 장치 SDK에도 있는 API가 있습니다. ::와 같은 네임스페이스를 명확하게 합니다.

  • 'THUMB' 모듈 컴퓨터 종류가 'ARM' 대상 컴퓨터 종류와 충돌합니다.

    솔루션 탐색기에서 프로젝트 파일을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

    구성 속성에서 링커를 확장한 다음 명령줄 속성을 클릭합니다. 속성 페이지의 각 Windows Mobile 5.0 구성에 대한 명령줄에서 /MACHINE:THUMB 스위치를 제거합니다.

  • 리소스 문자열이 제대로 구분되지 않았습니다.

    이식된 응용 프로그램의 리소스 문자열이 제대로 구분되지 않은 경우 문제가 발생할 수 있습니다. 솔루션 탐색기에서 프로젝트 파일을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다. 구성 속성에서 리소스를 확장한 다음 명령줄 속성을 클릭합니다. 리소스 컴파일러 명령줄에 -n 스위치를 추가합니다.

  • 대화 상자에 BEGIN이 필요합니다.

    이 오류는 주로 "0x1 파일을 찾을 수 없습니다"와 같은 파일을 찾을 수 없는 오류 뒤에 발생합니다. 오류로 표시된 RC 파일로 이동해서 다음 코드 예제와 같이 코드를 수정하여 FONT 선언 주위에 #ifdef 문을 사용합니다.

    원본 코드:

    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로 업그레이드 마법사

기타 리소스

Windows Mobile Platform Migration FAQ for Developers