Версии библиотеки MFC

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

Библиотека MFC доступна в версиях, поддерживающих однобайтовую и многобайтовую кодировку набора символов ANSI (MBCS), а также в версиях, поддерживающих Unicode (в кодировке UTF-16LE, родной для Windows набор символов). Каждая версия MFC доступна в виде статической библиотеки или в виде общей библиотеки DLL. Существует также меньшая версия статической библиотеки MFC, в которой отсутствуют элементы управления MFC для диалогов, предназначенная для приложений, особо чувствительных к размерам и не нуждающихся в этих элементах управления. Библиотеки MFC доступны в версиях отладки и выпуска для поддерживаемых архитектур, включая процессоры x86, x64 и ARM. Вы можете создавать как приложения (.exe файлы), так и библиотеки DLL с любой версией библиотек MFC. Существует также набор библиотек MFC, скомпилированных для взаимодействия с управляемым кодом. Общие DLL-библиотеки MFC содержат номер версии для указания библиотечной двоичной совместимости.

Автоматическое связывание версий библиотеки 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 и Юникод

Версии библиотеки ANSI/MBCS MFC поддерживают как однобайтовые наборы символов, такие как ASCII, так и многобайтовые наборы символов, такие как SHIFT-JIS. Версии библиотеки MFC поддерживают Юникод в формате широких символов UTF-16LE. Используйте версии библиотеки ANSI/MBCS MFC для поддержки Юникода с кодировкой UTF-8.

Чтобы настроить конфигурацию проекта для использования однобайтовой, многобайтовой или многобайтовой строки Юникода и поддержки символов в интегрированной среде разработки, используйте диалоговое окно "Свойства проекта ". На странице "Общие свойства> конфигурации" задайте свойству Character Set значение Not Set для использования однобайтового набора символов. Задайте для свойства значение Use Multi-Byte Character Set, чтобы использовать многобайтовый набор символов, или значение Use Unicode Character Set, чтобы использовать кодировку Юникода в формате UTF-16.

Проекты MFC используют символ препроцессора _UNICODE для указания поддержки широких символов Юникода UTF-16 и _MBCS для указания поддержки MBCS. Эти параметры являются взаимоисключающими в проекте.

Соглашения об именовании статических библиотек MFC

Статические библиотеки для MFC используют следующие соглашения об именовании. Имена библиотек имеют форму

uAFXcd.LIB

где буквы, отображаемые в курсивном нижнем регистре, являются заполнителями для описателей, значения которых показаны в следующей таблице:

Спецификатор Ценности и значения
u ANSI/MBCS (N) или Юникод (U); опустите для версии без элементов управления MFC в диалоговых окнах
c Версия с элементами управления MFC в диалоговых окнах (CW) или без (NMCD)
д Отладка или релиз: D=Debug; опустите указатель для релиза

Все библиотеки, перечисленные в следующей таблице, включены в каталог \atlmfc\lib для поддерживаемых архитектур сборки.

Библиотека Описание
NAFXCW. LIB Библиотека MFC Static-Link, версия релиза
NAFXCWD.LIB Отладочная версия библиотеки MFC Static-Link
UAFXCW.LIB Библиотека MFC Static-Link с поддержкой Unicode, релизная версия
UAFXCWD.LIB Библиотека Static-Link MFC с поддержкой Юникода, отладочная версия
AFXNMCD.LIB Библиотека MFC Static-Link без элементов управления диалогами MFC, релизная версия
AFXNMCDD.LIB Библиотека Static-Link MFC без управляющих элементов для диалогов MFC, версия для отладки

Файлы отладчика с одинаковым базовым именем и расширением PDB также доступны для каждой статической библиотеки.

Соглашения об именовании общих библиотек DLL MFC

Общие библиотеки DLL MFC также соответствуют структурированному соглашению об именовании. Это упрощает определение библиотеки DLL или библиотеки, которую следует использовать для какой цели.

Библиотеки DLL MFC имеют номера версий , указывающие на совместимость двоичных файлов. Используйте библиотеки DLL MFC, имеющие ту же версию, что и другие библиотеки и средства сборки компилятора, чтобы гарантировать совместимость в проекте.

DLL (динамическая библиотека) Описание
Версия MFC.DLL Релизная версия MFC DLL, ANSI или MBCS
MFCверсииU.DLL Библиотека DLL MFC, версия выпуска Юникода
MFC версииD.DLL Отладочная версия DLL MFC, ANSI или MBCS
Версия MFCUD.DLL DLL MFC, отладочная версия Unicode
MFCMВерсия.DLL Библиотека DLL MFC с элементами управления Windows Forms, версия выпуска ANSI или MBCS
U.DLL версииMFCM DLL-библиотека MFC с элементами управления Windows Forms, выпуск версии Unicode
MFCMверсии D.DLL DLL библиотека MFC с элементами управления Windows Forms, отладочная версия ANSI или MBCS
MFCM версииUD.DLL DLL MFC с элементами управления Windows Forms, версия отладки Unicode

Библиотеки импорта, необходимые для создания приложений или библиотек DLL расширения MFC, использующих эти общие библиотеки DLL, имеют то же базовое имя, что и библиотека DLL, но имеет расширение LIB-файла. При использовании общих библиотек DLL небольшая статическая библиотека по-прежнему должна быть связана с кодом; эта библиотека называетсяверсией MFCS{U}{D}.lib.

Если вы динамически связываетесь с общей DLL-версией MFC, будь то из приложения или из DLL расширения MFC, необходимо включить в установку соответствующую MFCверсию.DLL или MFCверсиюU.DLL при развертывании продукта.

Список библиотек DLL Visual C++, которые могут распространяться с помощью приложений, см. в разделе "Распространяемый код" для Microsoft Visual Studio 2017 и microsoft Visual Studio 2017 SDK (включая служебные программы и файлы buildServer) или распространяемый код для Visual Studio 2019.

Дополнительные сведения о поддержке MBCS и Юникода в MFC см. в поддержке Юникода и многобайтового набора символов (MBCS).

Статические или общие динамические библиотеки MFC можно использовать для создания библиотек DLL, которые можно использовать как для исполняемых файлов MFC, так и без MFC. Они называются "обычными библиотеками DLL" или "обычными библиотеками DLL MFC", чтобы отличить их от библиотек DLL расширения MFC, которые могут использоваться только приложениями MFC и библиотеками DLL MFC. Библиотека DLL, созданная с помощью статических библиотек MFC, иногда называется USRDLL в более ранних ссылках, так как проекты БИБЛИОТЕК DLL MFC определяют символ препроцессора _USRDLL. Библиотека DLL, использующая общие библиотеки DLL MFC, иногда называется AFXDLL в более старых ссылках, так как определяет символ препроцессора _AFXDLL.

При создании проекта DLL путем связывания со статическими библиотеками MFC библиотека DLL может быть развернута без общих библиотек DLL MFC. Когда ваш проект DLL подключается к библиотекам импорта MFCversion.LIB или MFCversionU.LIB, необходимо развернуть соответствующую общую DLL MFC MFCversion.DLL или MFCversionU.DLL вместе с вашей DLL. Дополнительные сведения см. в библиотеках DLL.

См. также

Общие разделы MFC