На этом шаге мы рассмотрим особенности создания и использования DLL в MFC.
Во время работы с мастером AppWizard нужно выбрать - использовать библиотеки MFC в виде разделяемых DLL или в виде статических библиотек, которые будут скомпонованы с Вашим исполняемым файлом. Если Вы решили применить разделяемые DLL, следует убедиться, что на компьютерах пользователей установлены библиотека MFC MFCxx.DLL (xx - ее версия) и стандартная библиотека Visual C++ MSVCRT.DLL. Как правило, эти файлы включают в комплект каждого приложения на базе MFC.
Выбрав разделяемые DLL, Вы намного уменьшаете размер исполняемого файла. Такой стратегии следует придерживаться, если на компьютер устанавливается много MFC-приложений. При этом они будут использовать один набор динамически подключаемых библиотек, не занимая дисковое пространство несколькими копиями одной и той же DLL.
При разработке приложений на C++ Вам придется создавать свои классы, предназначенные для использования в разных программах. Из них часто составляют DLL, похожие на библиотеки MFC. Классы, содержащиеся в DLL и доступные всем приложениям, называют экспортируемыми. Их открытыми функциями-членами и переменными-членами может оперировать приложение-клиент. Например, динамически подключаемые библиотеки MFC экспортируют класс CString. Поэтому любое приложение, подключившее эти библиотеки, способно создать и использовать объекты CString.
Для построения DLL, экспортирующей Ваш класс, нужно выбрать пункт MFC AppWizard (dll) в диалоговом окне New Project.
Рис.1. Создание обычной DLL
Мастер АррWizard называет такие библиотеки обычными DLL (regular DLL).
При реализации классов, содержащихся в обычных DLL, можно использовать классы MFC. Но давайте посмотрим, что произойдет, если Вы захотите экспортировать класс, унаследованный от класса MFC. Допустим, Вы создали класс для собственного диалогового окна CMyDialog, производный от класса CDialog, и включили в него несколько новых функций для работы с элементами управления. Как в таком случае Вы можете быть уверены, что базовый класс (CDialog) экспортирован правильно и что его открытые функции-члены и neременные-члены доступны приложению-клиенту?
Для того чтобы использовать класс CMyDialog как класс MFC, вызывать функции-члены CDialog и предоставить возможность указателям типа CMyDialog ссылаться и на CDialog, требуется другой тип DLL, называемый библиотекой расширения MFC (MFC extension DLL). Такие библиотеки необходимы для реализации классов, производных от классов MFC. Они, согласно своему названию, расширяют библиотеку MFC.
Библиотеки расширения собираются на основе разделяемых DLL MFC. Их могут использовать только те MFC-приложения, которые созданы с применением разделяемых DLL MFC. Причем, как приложение-клиент, так и библиотека расширения должны применять одну и ту же версию MFC.
Чтобы создать библиотеку расширения MFC, в диалоговом окне New Projects щелкните пункт MFC AppWizard (dll). Затем на первой странице мастера MFC DLL AppWizard выберите переключатель MFC Extension DLL (рисунок 2).
Рис.2. Создание библиотеки расширения MFC
На следующем шаге мы рассмотрим архитектуру приложения Win32.