MFC 라이브러리 버전

MFC 라이브러리는 ANSI MBCS(싱글바이트 및 멀티바이트 문자 집합) 코드와 유니코드(UTF-16LE, Windows 네이티브 문자 집합으로 인코딩됨)를 지원하는 버전에서 사용할 수 있습니다. 각 MFC 버전은 정적 라이브러리 또는 공유 DLL로 사용할 수 있습니다. 크기가 매우 중요하고 해당 컨트롤이 필요하지 않은 애플리케이션의 경우 대화 상자용 MFC 컨트롤을 제외하는 더 작은 MFC 정적 라이브러리 버전도 있습니다. MFC 라이브러리는 x86, x64 및 ARM 프로세서를 포함하는 지원되는 아키텍처에 대한 디버그 및 릴리스 버전 모두에서 사용할 수 있습니다. 모든 버전의 MFC 라이브러리를 사용하여 애플리케이션(.exe 파일) 및 DLL을 모두 만들 수 있습니다. 관리 코드와 상호 작용하기 위해 컴파일된 MFC 라이브러리 집합도 있습니다. MFC 공유 DLL에는 라이브러리 이진 호환성을 나타내는 버전 번호가 포함되어 있습니다.

MFC 라이브러리 버전의 자동 연결

MFC 헤더 파일은 빌드 환경에 정의된 값에 따라 연결할 MFC 라이브러리의 올바른 버전을 자동으로 결정합니다. MFC 헤더 파일은 링커에 특정 버전의 MFC 라이브러리에 연결하도록 지시하는 컴파일러 지시문을 추가합니다.

예를 들어 AFX입니다. H 헤더 파일은 링커가 전체 정적, 제한된 정적 또는 공유 DLL 버전의 MFC에 연결하도록 지시합니다. ANSI/MBCS 또는 유니코드 버전 빌드 구성에 따라 디버그 또는 소매 버전:

#ifndef _AFXDLL
    #ifdef _AFX_NO_MFC_CONTROLS_IN_DIALOGS
        #ifdef _DEBUG
            #pragma comment(lib, "afxnmcdd.lib")
        #else
            #pragma comment(lib, "afxnmcd.lib")
        #endif
        #pragma comment(linker, "/include:__afxNoMFCControlSupportInDialogs")
        #pragma comment(linker, "/include:__afxNoMFCControlContainerInDialogs")
    #endif
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "nafxcwd.lib")
        #else
            #pragma comment(lib, "nafxcw.lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "uafxcwd.lib")
        #else
            #pragma comment(lib, "uafxcw.lib")
        #endif
    #endif
#else
    #ifndef _UNICODE
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "d.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "d.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER ".lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER ".lib")
        #endif
    #else
        #ifdef _DEBUG
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "ud.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "ud.lib")
        #else
            #pragma comment(lib, "mfc" _MFC_FILENAME_VER "u.lib")
            #pragma comment(lib, "mfcs" _MFC_FILENAME_VER "u.lib")
        #endif
    #endif
#endif

MFC 헤더 파일에는 MFC 라이브러리, Win32 라이브러리, OLE 라이브러리, 샘플에서 빌드된 OLE 라이브러리, ODBC 라이브러리 등을 비롯한 모든 필수 라이브러리에 연결하는 지시문도 포함되어 있습니다.

ANSI, MBCS 및 유니코드

MFC ANSI/MBCS 라이브러리 버전은 ASCII와 같은 싱글바이트 문자 집합과 Shift-JIS와 같은 멀티바이트 문자 집합을 모두 지원합니다. MFC 유니코드 라이브러리 버전은 UTF-16LE 와이드 문자로 인코딩된 형식의 유니코드를 지원합니다. UTF-8로 인코딩된 유니코드 지원을 위해 MFC의 ANSI/MBCS 라이브러리 버전을 사용합니다.

IDE에서 단일 바이트, 멀티바이트 또는 와이드 문자 유니코드 문자열 및 문자 지원을 사용하도록 프로젝트 구성을 설정하려면 프로젝트 속성 대화 상자를 사용합니다. 구성 속성>일반 페이지에서 단일 바이트 문자 집합을 사용하도록 문자 집합 속성을 설정 안 됨으로 설정합니다. 멀티바이트 문자 집합을 사용하거나 유니코드 문자 집합을 사용하여 UTF-16으로 인코딩된 유니코드를 사용하도록 속성을 설정합니다.

MFC 프로젝트는 전처리기 기호 _UNICODE 사용하여 UTF-16 와이드 문자 유니코드 지원을 나타내고 MBCS 지원을 나타내는 _MBCS. 이러한 옵션은 프로젝트에서 상호 배타적입니다.

MFC 정적 라이브러리 명명 규칙

MFC에 대한 정적 라이브러리는 다음 명명 규칙을 사용합니다. 라이브러리 이름에는 양식이 있습니다.

uAFXcd. Lib

여기서 기울기 소문자에 표시된 문자는 다음 표에 의미가 표시된 지정자의 자리 표시자입니다.

지정자 값 및 의미
u ANSI/MBCS(N) 또는 유니코드(U); 대화 상자에서 MFC 컨트롤이 없는 버전 생략
c CW(대화 상자) 또는 NMCD 없이 MFC 컨트롤이 있는 버전
d 디버그 또는 릴리스: D=디버그; Release에 대한 지정자를 생략합니다.

다음 표에 나열된 모든 라이브러리는 지원되는 빌드 아키텍처에 대한 \atlmfc\lib 디렉터리에 미리 빌드되어 있습니다.

라이브러리 설명
NAFXCW.LIB MFC 정적 링크 라이브러리, 릴리스 버전
NAFXCWD.LIB MFC 정적 링크 라이브러리, 디버그 버전
UAFXCW. Lib 유니코드가 지원되는 MFC 정적 링크 라이브러리, 릴리스 버전
UAFXCWD. Lib 유니코드가 지원되는 MFC 정적 링크 라이브러리, 디버그 버전
AFXNMCD. Lib MFC 대화 상자 컨트롤이 없는 MFC 정적 링크 라이브러리, 릴리스 버전
AFXNMCDD. Lib MFC 대화 상자 컨트롤이 없는 MFC 정적 링크 라이브러리, 디버그 버전

기본 이름과 .pdb 확장명이 동일한 디버거 파일도 각 정적 라이브러리에 사용할 수 있습니다.

MFC 공유 DLL 명명 규칙

MFC 공유 DLL은 구조화된 명명 규칙도 따릅니다. 이렇게 하면 어떤 용도로 사용해야 하는지 DLL 또는 라이브러리를 더 쉽게 알 수 있습니다.

MFC DLL에는 이진 호환성을 나타내는 버전 번호가 있습니다. 다른 라이브러리 및 컴파일러 도구 집합과 버전이 동일한 MFC DLL을 사용하여 프로젝트 내의 호환성을 보장합니다.

DLL 설명
MFCversion.DLL MFC DLL, ANSI 또는 MBCS 릴리스 버전
MFC버전U.DLL MFC DLL, 유니코드 릴리스 버전
MFC버전D.DLL MFC DLL, ANSI 또는 MBCS 디버그 버전
MFC버전UD.DLL MFC DLL, 유니코드 디버그 버전
MFCMversion.DLL Windows Forms 컨트롤, ANSI 또는 MBCS 릴리스 버전이 있는 MFC DLL
MFCM버전U.DLL Windows Forms 컨트롤이 있는 MFC DLL, 유니코드 릴리스 버전
MFCM버전D.DLL Windows Forms 컨트롤, ANSI 또는 MBCS 디버그 버전이 있는 MFC DLL
MFCM버전UD.DLL Windows Forms 컨트롤이 있는 MFC DLL, 유니코드 디버그 버전

이러한 공유 DLL을 사용하는 애플리케이션 또는 MFC 확장 DLL을 빌드하는 데 필요한 가져오기 라이브러리의 기본 이름은 DLL과 같지만 .lib 파일 이름 확장명은 있습니다. 공유 DLL을 사용하는 경우 작은 정적 라이브러리는 여전히 코드와 연결되어야 합니다. 이 라이브러리의 이름은 MFCS버전{U}{D}.lib입니다.

애플리케이션 또는 MFC 확장 DLL에서 공유 DLL 버전에 동적으로 연결하는 경우 제품을 배포할 때 일치하는 MFC version.DLL 또는 MFC버전U.DLL을 포함해야 합니다.

애플리케이션 과 함께 배포할 수 있는 Visual C++ DLL 목록은 Microsoft Visual Studio 2017 및 Microsoft Visual Studio 2017 SDK용 배포 가능 코드(유틸리티 및 BuildServer 파일 포함) 또는 Visual Studio 2019용 배포 가능 코드를 참조하세요.

MFC의 MBCS 및 유니코드 지원에 대한 자세한 내용은 유니코드 및 MBCS(멀티바이트 문자 집합) 지원을 참조 하세요.

정적 또는 공유 동적 MFC 라이브러리를 사용하여 MFC 및 비 MFC 실행 파일 모두에서 사용할 수 있는 DLL을 만들 수 있습니다. MFC 앱 및 MFC DLL에서만 사용할 수 있는 MFC 확장 DLL과 구분하기 위해 "일반 DLL" 또는 "일반 MFC DLL"이라고 합니다. MFC DLL 프로젝트는 전처리기 기호 _USRDLL 정의하기 때문에 MFC 정적 라이브러리를 사용하여 빌드된 DLL을 이전 참조에서 USRDLL이라고도 합니다. MFC 공유 DLL을 사용하는 DLL은 전처리기 기호 _AFXDLL 정의하기 때문에 이전 참조에서 AFXDLL이라고도 합니다.

MFC 정적 라이브러리에 연결하여 DLL 프로젝트를 만들 때 MFC 공유 DLL 없이 DLL을 배포할 수 있습니다. DLL 프로젝트가 가져오기 라이브러리 MFC버전에 연결되는 경우 LIB 또는 MFC버전U.LIB는 DLL과 함께 일치하는 MFC 공유 DLL MFCversion.DLL 또는 MFC버전U.DLL을 배포해야 합니다. 자세한 내용은 DLL을 참조 하세요.

참고 항목

일반 MFC 항목