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