[Tips] Win32 콘솔 애플리케이션에서 MFC class들을 사용하기

  5 Comments

이미 잘 알려진 내용이지만 제 블로그의 검색을 위해 짧게 포스팅합니다.

Visual Studio 6.0에서 Win32 콘솔 애플리케이션 (Console Application)으로 프로젝트를 만들어 표준 C/C++ 라이브러리를 이용할 때 MFC (Microsoft Foundation Class Library)의 클래스들 (e.g. CString, CObList)을 이용하는 방법입니다.

1. CRT (C Run-Time) library를 Multithreaded로 변경

  1. Alt+F7을 누르거나 메뉴의 Project / Setting을 선택해서 “Project Settings” 창을 띄웁니다.
  2. “C/C++” 탭에서 “Category”를 “Code Generation”이라고 선택합니다.
  3. 아래 그림과 같이 “Use run-time library”를 “Debug Multithreaded”로 변경합니다. 
    ※ 물론 릴리즈 모드인 경우는 Multithreaded를 선택하겠죠.

MFC 클래스를 위한 헤더 파일들을 포함시켜도 링크 에러가 나는 것은 Win32 console application 프로젝트는 기본적으로 “Single-Threaded” CRT library를 사용해서 멀티스레드를 위한 api 구현이 없기 때문입니다. 그래서 이와 같이 CRT 라이브러리를 변경하는 것입니다.

2. 필요한 헤더 파일 포함

사용할 MFC 클래스를 정의하고 있는 헤더 파일들을 포함합니다.

※ MFC의 헤더 파일과 라이브러리 설명은 Devpia의 이 글을 참고하시면 됩니다.

간단히 많은 것을 포함하는 헤더 파일들만 설명드리면..

Afx.h: MFC를 위한 main header file로 컨테이너를 비롯한 많은 MFC 클래스들을 선언합니다.

Afxtempl.h: CArray등 템플릿을 요하는 클래스들의 선언을 가지고 있습니다.

간단히 CString이나 CObList를 사용하는 경우는 Afx.h를 포함하면 될 것이고

CArry, CList등 템플릿 컨테이너 클래스를 사용할 경우는 Afxtempl.h를 포함하면됩니다.

순서는 Afx.h가 먼저 오는 것이 좋겠죠? (순서가 바뀌어도 컴파일 에러는 나지 않으나…)

// MFC main header file. for CString, CObList, etc
#include <afx.h>

// MFC template based container class. for CArray, CList, etc
#include <afxtempl.h>
#include <iostream>

void main()
{
CString str;
CObList list;
CArray<CString, CString> ar;
str.Format(“test CString: %s”, “temp string”);
std::cout<<(LPCSTR)str<<std::endl;
}


블로그 이미지

요다할아범

,