다음을 통해 공유


Visual C++ 장치 프로젝트 빌드 및 디버깅

업데이트: 2007년 11월

장치 프로젝트를 빌드하고 디버깅하는 작업은 데스크톱 프로젝트를 빌드하고 디버깅하는 것과 약간 다릅니다.

다음은 빌드 및 디버깅 기술 목록입니다.

  • 장치 프로젝트에 대한 스레딩 모델은 기본적으로 자유 스레딩 모델입니다. 하지만 CE OS 이미지를 빌드할 때 DCOM 옵션을 선택하지 않은 경우 Windows CE에서는 COM 마샬링 및 연결된 정의를 완전히 지원하지 않습니다. 따라서 특정 CE 플랫폼에서 컴파일러는 DCOM 지원과 단일 및 다중 스레드 정의에 대한 경고를 생성할 수 있습니다. 이 경고에서는 개발자에게 직접 코드에서 스레드 및 동기화를 처리할 것을 권고합니다. 예를 들어, ATL 장치 프로젝트를 컴파일할 때 컴파일러는 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 정의에 대한 경고를 생성할 수 있습니다. Windows Mobile 플랫폼에서 COM 개체와 ATL COM 개체를 만들고 웹 서비스를 사용하는 경우도 여기에 해당합니다. #define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA와 같이 기본 헤더 파일에 단일 스레드 개체에 대해 이 플래그를 정의할 수 있습니다. 코드에서 다중 스레드를 처리하는 경우 이 경고를 무시해도 상관없습니다. Windows CE의 COM, DCOM 및 스레딩 모델에 대한 자세한 내용은 Windows CE 5.0 설명서의 COM Threads and Processes 및 Component Services(COM and DCOM)를 참조하십시오.

  • 네이티브 장치 응용 프로그램은 기본적으로 정적 연결을 사용하여 만들어집니다. 동적 연결로 전환하려는 경우 다음과 같은 런타임 DLL을 추가 파일 프로젝트 속성에 추가하면 됩니다.

    • MFC 응용 프로그램 릴리스 빌드 구성

      추가 파일 프로젝트 속성에 다음과 같은 런타임 DLL 추가: msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80U.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • MFC 응용 프로그램 디버그 빌드 구성

      추가 파일 프로젝트 속성에 다음과 같은 런타임 DLL 추가: msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;MFC80Ud.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • ATL 응용 프로그램 릴리스 빌드 구성

      추가 파일 프로젝트 속성에 다음과 같은 런타임 DLL 추가: msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\|%CSIDL_PROGRAM_FILES%\<projectname>|0;

    • ATL 응용 프로그램 디버그 빌드 구성

      추가 파일 프로젝트 속성에 다음과 같은 런타임 DLL 추가: msvcr80d.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;msvcr80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;atl80.dll|$(BINDIR)\$(INSTRUCTIONSET)\%CSIDL_PROGRAM_FILES%\<projectname>|0;

      Windows CE DLL 로딩에 대한 자세한 내용은 Windows CE DLL 로딩 LoadLibrary를 참조하십시오.

      참고:

      \Windows\aDLL.dll과 \Program Files\aDLL.dll의 경우와 같이 같은 이름의 여러 DLL을 동시에 서로 다른 디렉터리에서 로드하면 예기치 않은 결과가 발생할 수 있습니다. DLL 복사본을 한 번에 하나씩 로드하거나 처음 로드된 DLL이 호출될 것으로 예상하는 것이 좋습니다.

다음은 몇 가지 추가 고려 사항입니다.

  • MFC 8.0 #으로 이식할 경우 _WIN32_WCE_PSPC를 정의합니다. 이 플래그는 기본적으로 MFC8.0에는 정의되어 있지 않습니다.

  • 컴파일 대상 아키텍처 드롭다운 목록에서 Pocket PC 2003 또는 Smartphone 2003을 대상으로 지정할 경우 ARM4T 옵션이 지원되지 않습니다. 이 목록을 찾으려면 <project name> 속성 페이지 대화 상자에서 구성 속성을 클릭하고 C/C++, 고급을 차례로 클릭한 다음 컴파일 대상 아키텍처를 선택합니다.

  • GAPI 함수는 C++에서는 사용할 수 있으나 C에서는 사용할 수 없습니다. 코드에 gx.h를 포함하는 경우에만 C++에서 작동합니다. 코드에서 GAPI를 사용하고 있으면 /TC 컴파일러 옵션을 사용하여 컴파일하지 마십시오.

  • 장치용 MFC 8.0에서 CommandBar의 만들기 및 삽입을 제어합니다. CDialog::m_pWndEmptyCB 멤버는 더 이상 지원되지 않습니다. 대화 상자용으로 만들어진 이 멤버는 Pocket PC에서 MenuBar라고도 하는 빈 CCommandBar 클래스를 가리키는 데 사용되었으며, 이 멤버를 참조하여 사용자 고유의 MenuBar를 삽입할 수 있습니다.

  • Checked::_strlwr_s, _strlwr_s_l, _mbslwr_s, _mbslwr_s_l, _wcslwr_s, _wcslwr_s_l, Checked::tcslwr_sChecked::gcvt_s는 Windows CE를 사용하는 플랫폼용으로 제공됩니다.

  • _WIN32_WCE_PSPC 플래그가 더 이상 정의되지 않습니다. _WIN32_WCE_PSPC WIN32_PLATFORM_PSPC 플래그를 대신 사용할 수 있습니다.

  • STL 응용 프로그램 이식의 경우 #include <deque.h> 대신 <deque>를 포함하십시오.

  • IDE는 다중 플랫폼을 지원합니다. 장치 프로젝트의 대화 상자 리소스에서 MFC나 ATL ActiveX 개체를 호스팅하는 경우 해당 컨트롤을 만들어 해당 데스크톱 ActiveX 프로젝트에도 등록해야 합니다. 컨트롤은 리소스 편집기에서 장치 대화 상자 템플릿에 추가하여 올바르게 실행할 수 있습니다. ActiveX 컨트롤의 데스크톱 버전 및 장치 버전은 동일한 GUID와 디자인 타임 속성(예: 배경색)을 가져야 합니다.

참고 항목

작업

방법: Visual C++ 프로젝트에서 장치 제공

개념

Visual C++ 장치 프로젝트 디버깅 및 배포 설정

Visual C++ 장치 프로젝트 디버깅 및 배포 설정

참조

<Projectname> 속성 페이지 대화 상자, 구성 속성, 디버깅(장치)

기타 리소스

장치 프로젝트 디버깅

Visual C++ 장치 프로젝트 만들기 및 이식

Visual C++ 장치 프로젝트 개발