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


Виды библиотек DLL

В этом разделе представлены сведения, которые будут полезны при определении вида библиотеки DLL, которую необходимо построить.

Доступные виды библиотек DLL

С помощью Visual C++ можно построить библиотеки DLL Win32 в коде C или C++, в которых не используется библиотека Microsoft Foundation Class (MFC). Можно создать проект библиотеки DLL без использования MFC с помощью мастера приложений Win32.

Сама библиотека MFC доступна в библиотеках статической компоновки или, с помощью мастера MFC DLL, в библиотеках DLL. Если библиотека DLL использует MFC, Visual C++ поддерживает три различных скрипта разработки библиотеки DLL:

  • Построение обычной библиотеки DLL, статически скомпонованной с MFC

  • Построение обычной библиотеки DLL, динамически скомпонованной с MFC

  • Построение библиотеки DLL расширения MFC, которая всегда динамически скомпонована с MFC

Дополнительные сведения

Выбор типа используемой библиотеки DLL

Если библиотека DLL не использует MFC, используйте Visual C++, чтобы построить библиотеку Win32 DLL без использования MFC. Компоновка библиотеки DLL с MFC (как статически, так и динамически) занимает значительный объем оперативной памяти и места на диске. Не следует выполнять компоновку с MFC, если библиотека DLL фактически не использует MFC.

Если библиотека DLL будет использовать MFC, а также будет использоваться как приложениями MFC, так и приложениями, не использующими MFC, то необходимо построить обычную библиотеку DLL, динамически скомпонованную с MFC, или обычную библиотеку DLL, статически скомпонованную с MFC. В большинстве случаев удобно использовать обычную библиотеку DLL, динамически скомпонованную с MFC, поскольку размер DLL-файла в этом случае будет намного меньше; существенной может быть и экономия оперативной памяти при использовании общей версии MFC. При статической компоновке с MFC размер файла библиотеки DLL будет больше. Кроме этого, потенциально будет использоваться больший объем оперативной памяти, поскольку этот файл выполняет загрузку собственной закрытой копии кода библиотеки MFC.

Построение библиотеки DLL, которая динамически скомпонована с MFC, происходит быстрее, чем построение библиотеки DLL, которая статически скомпонована с MFC, поскольку нет необходимости связывать саму библиотеку MFC. Это особенно справедливо в отладочных построениях, для которых компоновщик выполняет сжатие отладочной информации. С помощью компоновки с библиотекой DLL, которая уже содержит отладочную информацию, можно уменьшить объем отладочной информации путем ее сжатия в целевой библиотеке DLL.

Недостаток динамической компоновки с MFC состоит в необходимости распространения общих DLL-файлов Mfcx0.dll и Msvcrxx.dll (или подобных файлов) с целевой библиотекой DLL. Библиотеки MFC DLL является свободно распространяемыми, однако необходимо установить библиотеки DLL в программу установки. Кроме того, необходимо предоставить файл Msvcrxx.dll, содержащий библиотеку времени выполнения языка C, которая используется как программой, так и самими библиотеками MFC DLL.

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

Если библиотека DLL динамически скомпонована с MFC, то библиотеки MFC DLL могут быть распространены с данной библиотекой DLL. Эта архитектура особенно полезна для совместного использования библиотеки классов несколькими исполняемыми файлами для экономии дискового пространства и минимизации использования памяти.

Вплоть до версии 4.0 в Visual C++ поддерживались только два вида библиотек DLL, которые использовали MFC: библиотеки USRDLL и AFXDLL. Обычная DLL, статически скомпонованная с MFC, имеет те же характеристики, что и предшествующая библиотека USRDLL. Библиотеки DLL расширения MFC имеют такие же характеристики, что и предыдущие библиотеки AFXDLL.

Дополнительные сведения

См. также

Основные понятия

DLL в Visual C++