Экспорт и импорт функций

Лабораторная работа №14

Тема: «Использование динамических библиотек для создания приложений»

Цель работы: приобрести практические навыки создания приложений с использованием динамических библиотек.

Краткие теоретические сведения:

Наиболее прямой путь создания программы - собрать исходный код всех функ­ций, скомпилировать его и скомпоновать все в единый исполняемый образ. Эта монолитная модель с одним исполняемым образом проста, но обладает рядом недостатков.

Динамические библиотеки могут быть использованы для создания разделяемых библиотек. Одной динамической библиотекой пользуются несколько программ, а в память загружается только одна ее копия. Все программы отображают адресные пространства своих процессов в код библиотеки, при этом каждый поток будет иметь собственную копию неразделяемой памяти в стеке.

Неявное связывание

Неявное связывание, или связывание во время загрузки- более простой из двух способов. При использовании языка Microsoft Visual C++ для этого необ­ходим ряд шагов:

1. Функции для новой библиотеки собираются и компонуются как библиотека DLL, а не как, например, консольное приложение.

2. В процессе компоновки создается библиотечный файл.LIB, который является суррогатомдля основного кода. Этот файл необходимо поместить в каталог вызывающей программы.

3. Процесс компоновки создает и файл.dll, содержащий исполняемый образ. Обычно этот файл помещается в тот же каталог, что и приложение, которое бу­дет его использовать, а приложение загружает.DLL во время инициализации.

Экспорт и импорт функций

Наиболее существенное изменение, необходимое для переноса функции в динами­ческую библиотеку - это ее определение как экспортируемой. Это достигается путем использования мо­дификатора для функции, помещаемой в динамическую библиотеку как показано ниже:

_declspec (dllexport)

DWORD MyFunction (...);

_declspec – модификатор функции,

MyFunction – функция, помещаемая в библиотеку.

В этом случае процесс компоновки создаст файл библиотеки.dll и файл.lib. Файл.lib - это суррогат библиотеки, который должен быть связан с вызывающей ее программой для разрешения внешних ссылок и создания действительных связей с файлом.dll во время загрузки и подключаемый на стадии компановки.

Вызывающая функцию программа должна определить импортируемую функцию путем использования модификатора _declspec (dllimport)

DWORD MyFunction (...);

При компоновке вызывающей библиотеку программы, т.е. перед созданием.exe файла, необходимо в меню Project -->Setting на вкладке Link в окне Project_Options набрать путь и имя файла библиотеки MyFunction.lib. После этого необходимо убедиться в том, что файл библиотеки.DLL доступен ей. Обычно это обеспечивается помещением файла.DLL в тот же каталог, в котором на­ходится исполняемый файл.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: