프로젝트를 혼합 모드에서 순수 IL로 변환
모든 Visual C++ CLR 프로젝트는 기본적으로 C 런타임 라이브러리에 링크됩니다.그 결과 네이티브 코드와 공용 언어 런타임을 대상으로 하는 코드(관리 코드)를 함께 사용하므로 이러한 프로젝트는 혼합 모드 응용 프로그램으로 분류됩니다.이러한 프로젝트는 컴파일될 때 MSIL(Microsoft intermediate language)이라고도 하는 IL(Intermediate Language)로 컴파일됩니다.
혼합 모드 응용 프로그램을 순수 IL로 변환하려면
다음과 같이 CRT(C Run-Time Libraries)에 대한 링크를 제거합니다.
응용 프로그램의 진입점을 정의하는 .cpp 파일에서 진입점을 Main()으로 변경합니다.Main()을 사용하면 프로젝트는 CRT에 링크되지 않습니다.
솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 선택하여 응용 프로그램의 속성 페이지를 엽니다.
링커의 고급 프로젝트 속성 페이지에서 진입점을 선택한 다음 이 필드에 Main을 입력합니다.
콘솔 응용 프로그램의 경우, 링커의 시스템 프로젝트 속성 페이지에서 하위 시스템 필드를 선택하고 이 필드를 **콘솔(/SUBSYSTEM:CONSOLE)**로 변경합니다.
[!참고]
Windows Forms 응용 프로그램의 경우에는 하위 시스템 필드가 기본적으로 Windows(/SUBSYSTEM:WINDOWS)로 설정되어 있으므로 이 속성을 설정할 필요가 없습니다.
stdafx.h에서 #include 문을 모두 주석으로 처리합니다.예를 들어, 콘솔 응용 프로그램에서는 다음과 같이 합니다.
// #include <iostream> // #include <tchar.h>
또는
예를 들어, Windows Forms 응용 프로그램에서는 다음과 같이 합니다.
// #include <stdlib.h> // #include <malloc.h> // #include <memory.h> // #include <tchar.h>
Windows Forms 응용 프로그램의 경우에는 Form1.cpp에서 windows.h를 참조하는 #include 문을 주석으로 처리합니다.예를 들면 다음과 같습니다.
// #include <windows.h>
다음 코드를 stdafx.h에 추가합니다.
#ifndef __FLTUSED__ #define __FLTUSED__ extern "C" __declspec(selectany) int _fltused=1; #endif
다음과 같이 관리되지 않는 형식을 모두 제거합니다.
해당되는 경우, 관리되지 않는 형식을 System 네임스페이스의 구조체에 대한 참조로 바꿉니다.다음 표는 일반적인 관리되지 않는 형식을 나열한 것입니다.
구조체
설명
부울 값을 나타냅니다.
부호 없는 8비트 정수를 나타냅니다.
유니코드 문자를 나타냅니다.
일반적으로 날짜와 시간으로 표시된 시간을 나타냅니다.
10진수를 나타냅니다.
배정밀도 부동 소수점 숫자를 나타냅니다.
GUID(Globally Unique IDentifier)를 나타냅니다.
부호 있는 16비트 정수를 나타냅니다.
부호 있는 32비트 정수를 나타냅니다.
부호 있는 64비트 정수를 나타냅니다.
포인터나 핸들을 나타내는 데 사용되는 플랫폼별 형식입니다.
부호 있는 8비트 정수를 나타냅니다.
단정밀도 부동 소수점 숫자를 나타냅니다.
시간 간격을 나타냅니다.
부호 없는 16비트 정수를 나타냅니다.
부호 없는 32비트 정수를 나타냅니다.
부호 없는 64비트 정수를 나타냅니다.
포인터나 핸들을 나타내는 데 사용되는 플랫폼별 형식입니다.
값을 반환하지 않는 메서드, 즉 void 반환 형식을 갖는 메서드를 나타냅니다.