프로젝트를 혼합 모드에서 순수 IL로 변환

모든 Visual C++ CLR 프로젝트는 기본적으로 C 런타임 라이브러리에 링크됩니다.그 결과 네이티브 코드와 공용 언어 런타임을 대상으로 하는 코드(관리 코드)를 함께 사용하므로 이러한 프로젝트는 혼합 모드 응용 프로그램으로 분류됩니다.이러한 프로젝트는 컴파일될 때 MSIL(Microsoft intermediate language)이라고도 하는 IL(Intermediate Language)로 컴파일됩니다.

혼합 모드 응용 프로그램을 순수 IL로 변환하려면

  1. 다음과 같이 CRT(C Run-Time Libraries)에 대한 링크를 제거합니다.

    1. 응용 프로그램의 진입점을 정의하는 .cpp 파일에서 진입점을 Main()으로 변경합니다.Main()을 사용하면 프로젝트는 CRT에 링크되지 않습니다.

    2. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 선택하여 응용 프로그램의 속성 페이지를 엽니다.

    3. 링커고급 프로젝트 속성 페이지에서 진입점을 선택한 다음 이 필드에 Main을 입력합니다.

    4. 콘솔 응용 프로그램의 경우, 링커시스템 프로젝트 속성 페이지에서 하위 시스템 필드를 선택하고 이 필드를 **콘솔(/SUBSYSTEM:CONSOLE)**로 변경합니다.

      [!참고]

      Windows Forms 응용 프로그램의 경우에는 하위 시스템 필드가 기본적으로 Windows(/SUBSYSTEM:WINDOWS)로 설정되어 있으므로 이 속성을 설정할 필요가 없습니다.

    5. stdafx.h에서 #include 문을 모두 주석으로 처리합니다.예를 들어, 콘솔 응용 프로그램에서는 다음과 같이 합니다.

      // #include <iostream>
      // #include <tchar.h>
      

      또는

      예를 들어, Windows Forms 응용 프로그램에서는 다음과 같이 합니다.

      // #include <stdlib.h>
      // #include <malloc.h>
      // #include <memory.h>
      // #include <tchar.h>
      
    6. Windows Forms 응용 프로그램의 경우에는 Form1.cpp에서 windows.h를 참조하는 #include 문을 주석으로 처리합니다.예를 들면 다음과 같습니다.

      // #include <windows.h>
      
  2. 다음 코드를 stdafx.h에 추가합니다.

    #ifndef __FLTUSED__
    #define __FLTUSED__
       extern "C" __declspec(selectany) int _fltused=1;
    #endif
    
  3. 다음과 같이 관리되지 않는 형식을 모두 제거합니다.

    1. 해당되는 경우, 관리되지 않는 형식을 System 네임스페이스의 구조체에 대한 참조로 바꿉니다.다음 표는 일반적인 관리되지 않는 형식을 나열한 것입니다.

      구조체

      설명

      Boolean

      부울 값을 나타냅니다.

      Byte

      부호 없는 8비트 정수를 나타냅니다.

      Char

      유니코드 문자를 나타냅니다.

      DateTime

      일반적으로 날짜와 시간으로 표시된 시간을 나타냅니다.

      Decimal

      10진수를 나타냅니다.

      Double

      배정밀도 부동 소수점 숫자를 나타냅니다.

      Guid

      GUID(Globally Unique IDentifier)를 나타냅니다.

      Int16

      부호 있는 16비트 정수를 나타냅니다.

      Int32

      부호 있는 32비트 정수를 나타냅니다.

      Int64

      부호 있는 64비트 정수를 나타냅니다.

      IntPtr

      포인터나 핸들을 나타내는 데 사용되는 플랫폼별 형식입니다.

      SByte

      부호 있는 8비트 정수를 나타냅니다.

      Single

      단정밀도 부동 소수점 숫자를 나타냅니다.

      TimeSpan

      시간 간격을 나타냅니다.

      UInt16

      부호 없는 16비트 정수를 나타냅니다.

      UInt32

      부호 없는 32비트 정수를 나타냅니다.

      UInt64

      부호 없는 64비트 정수를 나타냅니다.

      UIntPtr

      포인터나 핸들을 나타내는 데 사용되는 플랫폼별 형식입니다.

      Void

      값을 반환하지 않는 메서드, 즉 void 반환 형식을 갖는 메서드를 나타냅니다.