Немного теории:
DLL ( англ. Dynamic-link library - динамически загружаемая библиотека) - реализованные компанией Microsoft общие библиотеки в ОС Windows и OS / 2. Как правило библиотеки имеют расширение файла *. dll, *. ocx (для библиотек, содержащих элементы управления ActiveX) или *. drv (драйверы старых версий ОС). Структура DLL такая же, как и в PE-файлов (Portable Executable) для 32 -, 64-разрядных Windows, и New-Executable (NE) для 16-битных Windows. DLL может содержать код, данные и ресурсы в любой комбинации.
Популярный вступление
Различные программы многооконного среды часто выполняют одинаковые действия, например, крестик в правом верхнем углу окна, закрывающего его, рисуется большинством программ одинаково. Расточительно было бы, чтобы каждая из этих программ имела соответствующую функцию - это раздувало бы их размеры. Поэтому, разумно, чтобы такие функции поступали в общее пользование. Для этого служат библиотеки с динамическим связыванием. Соответствующие функции загружаются в память компьютера из файла программы, а из специального файла, уже при исполнении. На самом деле, операционная система не загружает их повторно. Если программа при запуске требует загрузки динамической библиотеки, то операционная система проверяет, такая библиотека уже есть в памяти. Если она есть, то операционная система увеличивает счетчик клиентов для динамической библиотеки на единицу. При завершении работы, программа сообщает операционной системе о необходимости выгрузить динамическую библиотеку. При этом операционная система уменьшает счетчик клиентов на единицу. Если после такого уменьшения количество клиентов становится равной нулю, то тогда динамическая библиотека действительно выгружается из памяти компьютера.
Под Windows динамические библиотеки хранятся в файлах с расширением *. dll. Кроме подпрограмм там могут также храниться другие ресурсы, например, иконки илибитмапы. В коде приложения, использующего функции из динамической библиотеки, загрузки и выгрузки библиотеки должны быть прописаны непосредственно. Компилятору не требуется код функций, содержащихся в динамических библиотеках. При запуске программы, она, однако, искать соответствующую dll. Если такая dll не найдена на компьютере, то программа основном выполняться не будет, а выдаст сообщение об отсутствии динамической библиотеки.
Пошаговое создание dll в Visual Studio 2010
Для того чтобы создать dll в Visual Studio 2010, необходимо: Файл - Создать - Проект - Приложение Win32 (Можете консольное либо проект Win32).
После выбора, вводите имя и нажимаете ОК, затем далее и выбираете Тип приложения "библиотека DLL".
После этого вы попадаете на файл, где необходимо писать dll программы.
Пример написания dll файла
Самый простой пример кода следующий:
#include "stdafx.h"
#include <iostream>
extern "C++" __declspec(dllexport) void LetterList()
{
std::cout << "This function was called from LetterList() " << std::endl;
}
extern "C++" __declspec(dllexport) int PutInt(int param)
{
return param;
}
Одна функция выводит сообщение, другая функция возвращает принятое значение.
После этого вы компилируете dll и получаете 2 файла: ***.dll и ***.lib (в моем примере это будет dll.dll и dll.lib), затем вам необходимо создать хидер файл (***.h в моем примере это будет dll.h), где указываете функции, которые находятся в этом dll файле.
Пример написания в хидер файл:
void LetterList();
int PutInt(int param);
В нем мы описываем прототипы наших функций. Этот файл вы будете вставлять в вашу программу, где будете подключать dll файл.
DLL вызов функции c++
Многие задают вопрос: как вызвать функцию с dll файла c++. В этой статье мы описываем это.
Итак, мы имеем, откомпилированный dll файл, либер и хидер файл. Все это мы копируем в нашу программу, где мы будем подключать dll файл.
Для этого необходимо создать новый проект: Файл - Создать - Проект - Консольное Приложение Win32 (к примеру) - Готово. В этот проект вы вкидываете, где будет exe файл dll.dll и dll.lib, а хидер файл (dll.h) вы вкидываете, где ваши хидер файлы вашего проекта.
В полученный файл мы вписываем код программы, где вызываем наши две функции (PutInt и LetterList)
#include "stdafx.h"
#include "dll.h"
#include<iostream>
#include<conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int x = PutInt(5);
LetterList();
std::cout<<x;
_getch();
return 0;
}
Обратите внимание, что мы подключаем хидер файл ( #include "dll.h" ), который мы создали.
Уже осталось немного )))
Подключение dll файла в Visual Studio
Нам осталось только подключить файл. В Visual Studio это делается так: Проект - Свойства - Компановщик - Ввод - Дополнительные зависимости. Туда вы добаляете путь к вашему файлу.lib
В моем случае - это: D:\studio\Primer\Debug\dll.lib;
Теперь компилируете проект и получаете такой результат:
Вот так работают с dll файлами. Я считаю, что это самый простой метод для работы с динамически загружаемыми библиотеками.
Итак: в этой статье я ответил на воспросы:
- создание dll в visual studio 2010
- использование dll файла
- dll вызов функции c++
- как вызвать функцию с dll файла c++
- подключение dll файла
- использование dll файла
- пример написания dll файла
- пошаговое создание dll в visual studio 2010
У вас должно быть вот так:
*.dll и *.lib в папке Debug, а *.h в проекте.