Поддержка JavaScript отключена
SBP-Program | |||||
На главную — > C++ |   | ||||
  |
Как создать dll? Пример простой dll. Пусть dll экспортирует только одну функцию, которая находит сумму двух чисел. Итак, запускаем мастер создания нового проекта. В первом окне выбираем «Консольное приложение Win32» ( Win32 Consol Application), имя проекта Simplex, жмём ОК. Далее выбираем Параметры приложения —> Тип приложения —> DLL. В папку Заголовочные файлы добавим новый файл (.h) Simplex.h, получаем: В файл Simplex.h добавим код: Это функция, предназначенная для экспорта, здесь Теперь сделаем реализацию этой функции в файле Simplex.cpp: Выбираем в меню окна Построение —> Построить Simplex. Верхний файл Simplex.dll, с расширением dll, – это и есть наша длл. Кроме него нас здесь интересует второй файл снизу, его тип Object File Library. Ниже мы будем делать приложение для работы с dll и именно эти два файла будем копировать в папку приложения. Итак, как же нам запустить dll? Теперь рассмотрим использование dll. Для этого сделаем приложение. В папку Заголовочные файлы добавим новый файл (.h) SimplexStart.h, получаем: Далее, внимание, открываем Проводник, в нём наш проект Simplex, папку Debug и скопируем из неё два файла: Simplex.dll и второй снизу Simplex с типом файла Object File Library. Копии этих двух файлов в Проводнике вставим в папку проекта SimplexStart – > SimplexStart, получаем в папке SimplexStart – > SimplexStart: Вернёмся к проекту. В файл SimplexStart.h вставим строку: extern «C» __declspec(dllimport) int sum(int a, int b);
аргумент модификатора здесь dllimport. Изменим код SimplexStart.cpp: Здесь мы обращаемся к функции sum, которую экспортирует наша длл. Приложение отправит значения аргументов a и b в функцию dll sum(int a, int b), последняя вернёт результат суммирования, который мы сохраним в переменной retVal и выведем его на экран. И последнее. Надо добавить файл Simplex с типом файла Object File Library к нашему проекту: в Обозревателе решений правой кнопкой по SimplexStart —> Добавить —> Существующий элемент… . В открывшемся окне выбора находим папку нашего проекта, в ней паку SimplexStart, а в ней файл Simplex с типом файла Object File Library, его-то и выбираем. Если появится окно «Подходящие настраиваемые правила построения не найдены», то жмём «Нет» в нём. Получаем: Увидели Simplex.lib в самом низу картинки? Это то, что нам нужно. Если так не сделать, то получим ошибку: error LNK2019: ссылка на неразрешенный внешний символ. Но нам ошибка error LNK2019: ссылка на неразрешенный внешний символ не грозит, ведь мы подключили к проекту Simplex.lib. Строим приложение: выбираем в меню окна Построение —> Построить SimplexStart. Запускаем на исполнение: Отладка —> Запуск без отладки. Получаем: Как подключить dll явно? Явное подключение dll рассмотрим на примере. Для этого сделаем приложение. Запускаем мастер создания нового проекта. В первом окне выбираем Проект Win32, имя проекта SimplexStartEx. В Параметрах приложения, в разделе Тип приложения, выбираем Консольное, в Дополнительных параметрах убираем флаг Предварительно скомпилированный заголовок, жмём Готово. Далее, внимание, открываем Проводник, в нём наш проект Simplex, папку Debug и скопируем из неё файл: Simplex.dll. Копию этого длл файла в Проводнике вставим в папку поекта SimplexStartEx – > SimplexStartEx, получаем в папке SimplexStartEx – > SimplexStartEx: Изменим файл SimplexStartEx.cpp так: В строке typedef int (*P_Sum)(int, int);
мы объявляем новый тип P_Sum — это указатель на функцию. Строка HINSTANCE hSimplex = ::LoadLibrary(L»Simplex.dll»);
явно загружает библиотеку dll, т.е. нашу Simplex.dll. Далее P_Sum pSum = (P_Sum)::GetProcAddress(hSimplex, «sum»);
здесь объявляем указатель на функцию типа P_Sum и определяем его, он указывает на функцию sum из длл Simplex.dll. Теперь, когда у нас есть указатель на функцию, можно к ней обратиться: int retVal = (*pSum)(1, 2);
в этой строке (*pSum) — это разыменованный указатель на функцию sum, т.е. (*pSum) — новое обозначение функции sum. После завершения работы с dll её следует выгрузить: ::FreeLibrary(hSimplex);
Получаем: Программирование |
  | |||
 
|
 
|
||||