Поделиться через


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

Библиотека MFC доступна в версиях, поддерживающих однобайтовый и многобайтовый набор символов ANSI (МБ CS), а также версии, поддерживающие Юникод (закодированный как 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/МБ CS или Юникод версии, а также отладочная или розничная версия в зависимости от конфигурации сборки:

#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, МБ CS и Юникод

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

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

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

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

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

uAFXcd. LIB

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

класса хранения Значения и значения
u ANSI/МБ CS (N) или Юникод (U); опустить версию без элементов управления MFC в диалоговых окнах
c Версия с элементами управления MFC в диалоговых окнах (CW) или без (NMCD)
дн. Отладка или выпуск: D=Debug; Описатель описателя для выпуска

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

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

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

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

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

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

DLL-библиотеки Description
MFCversion.DLL Версия выпуска MFC DLL, ANSI или МБ CS
U.DLL версииMFC Библиотека DLL MFC, версия выпуска Юникода
MFCверсииD.DLL Версия отладки MFC, ANSI или МБ CS
MFCверсииUD.DLL БИБЛИОТЕКА DLL MFC, версия отладки Юникода
MFCMversion.DLL Библиотека DLL MFC с элементами управления Windows Forms, ANSI или версия выпуска МБ CS
U.DLL версииMFCM Библиотека DLL MFC с элементами управления Windows Forms, версия выпуска Юникода
MFCMверсииD.DLL Библиотека DLL MFC с элементами управления Windows Forms, ANSI или МБ CS Debug version
MFCMверсииUD.DLL БИБЛИОТЕКА DLL MFC с элементами управления Windows Forms, версия отладки Юникода

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

Если вы динамически связываетесь с общей версией БИБЛИОТЕКИ DLL MFC, независимо от того, из приложения или из библиотеки DLL расширения MFC, необходимо включить соответствующую версию MFCversion.DLL или U.DLL версииMFCпри развертывании продукта.

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

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

Статические или общие динамические библиотеки 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 ссылается на версию MFCбиблиотек импорта. Lib или MFC версииU.LIB необходимо развернуть соответствующую общую библиотеку DLL MFC MFCversion.DLL или U.DLL версииMFCвместе с библиотекой DLL. Дополнительные сведения см. в библиотеках DLL.

См. также

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