|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.02.2014, 16:00 | #1 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Пошаговая инструкция. Создание и использование Dll
Инструментарий
Операционная система: Windows 7 Версия Qt: Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL) Создание Dll - запускаем Qt Creator - в меню выбираем "File" -> "New File or Project..." - в разделе "Projects" выбираем "Libraries" - в центральном разделе выбираем "C++ Library" -> нажимаем кнопку "Choose..." - в выпадающем списке: Shared Library - имя проекта: Person - выбираем путь, где будет создан проект, к примеру: D:\Documents\Qt\QtDeploying\0001_dl l_Person - нажимаем "Next" -> "Next" -> "Next" -> "Finish" Изменяем файл "person.h" следующим образом: Код:
Изменяем файл "person.cpp" следующим образом: Код:
- в меню выбираем "Build" -> "Build Project Person" Создадим release-версию dll: - нажимаем кнопку "Projects" на панели слева - в разделе "Build Settings" в списке "Edit build configuration" выбираем: Release - в разделе "Build Steps" напротив "qmake" нажимаем "Details" - в списке "qmake build configuration" выбираем "Release" - в поле "Additional arguments" вводим (в двойных кавычках): "CONFIG += release" - в меню выбираем "Build" -> "Build Project Person" - переходим в папку "release" проект, там находится dll "Person.dll" - теперь мы можем использовать в других проектах файлы: person.h, person_global.h и Person.dll Использование Dll - в меню выбираем "File" -> "New File or Project..." - в разделе "Projects" выбираем "Applications" - в центральном разделе выбираем "Qt Console Application" -> нажимаем кнопку "Choose..." - имя проекта: UsageOfPersonDll - выбираем путь, где будет создан проект, к примеру: D:\Documents\Qt\QtDeploying\0002_Us ageOfPersonDll - нажимаем "Next" -> "Next" -> "Finish" - копируем в папку с проектом файлы: person.h, person_global.h и Person.dll - подключаем к проекту файлы "person.h" и "person_global.h", для этого кликаем правой кнопкой мыши по имени проекта в Qt Creator и выбираем "Add Existing Files" -> выделяем "person.h" и "person_global.h" -> нажимаем "Open" - в меню выбираем "Build" -> "Build Project UsageOfPersonDll" - копируем файл "Person.dll" из папки "debug" проекта "Person" в папку "debug" проекта "UsageOfPersonDll" - копируем файл "Person.dll" из папки "release" проекта "Person" в папку "debug" проекта "UsageOfPersonDll" - открываем файл "UsageOfPersonDll.pro" и добавляем следующую строку (путь к "Person.dll"): Код:
Код:
Код:
|
17.02.2014, 16:19 | #2 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Под другие платформы как собирать? Это ведь раздел кроссплатформенного программирования.
|
17.02.2014, 16:22 | #3 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
|
23.02.2014, 22:46 | #4 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
В целом, забавно. Но есть там еще Qt Plugin: http://qt-project.org/doc/qt-4.8/plugins-howto.html
Я так понимаю, это примерно та же DLL но чуть более удобная. Если она удобнее, то зачем нам собирать DLL с Qt? Единственная мотивация собрать DLL, ИМХО, это возможность прикрутить его к другому приложению, не использующему Qt (и по этой причине не способному сожрать плагин). Но если наше приложение, использующее DLL не исопльзует Qt, то и QString, например, оно не сожрет (а в вашем примере оно используется). Это значит, что с одной стороны, пример не очень хороший. С другой стороны, у Шлее пример не лучше. С третьей стороны, зачем нам собирать с Qt DLL, в которой Qt вообще ни разу не используется? Поэтому в сборке DLL на Qt я смысла вообще не вижу. Поправьте если не прав. А по системе плагинов в Qt есть статья на русском языке: http://pro-prof.com/archives/1316 (плагины реализуют различные методы интегрирования). В принципе, ничего не мешает вместо плагинов использовать DLL и в этом примере, но геморроя больше. Зачем нам геморрой? |
23.02.2014, 22:50 | #5 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Опять же, вот тут описано как подключать DLL статически. Это не интересно. А вот если делать это динамически (ну как фар, например плагины подключает свои - ищет в известном каталоге все подряд DLL...), это более интересно. Но надо проверять чтобы библиотека реализовывала нужный нам интерфейс (иначе приложение будет падать если кто-нибудь кинет в каталог фару левый DLL). Но а плагины в кьют элегантно решают эту проблему - все встроено и удобно из коробки.
|
01.05.2016, 12:54 | #6 |
Новичок
Джуниор
Регистрация: 01.05.2016
Сообщений: 1
|
В чем смысл?
Если вы вставляете в рабочий проект не только саму библиотеку (dll), но и заголовочный и исходник Person.h, Person.cpp, то зачем вообще нужна библиотека? Можно было с таким же успехом эти два файла просто запихнуть и использовать все функции оттуда, а dll вообще не нужна. Бред какой-то
|
01.05.2016, 12:58 | #7 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Так без срр же вроде.
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
01.05.2016, 13:21 | #8 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,327
|
Цитата:
|
|
10.05.2016, 13:25 | #9 | |||
Форумчанин
Регистрация: 13.08.2011
Сообщений: 184
|
Цитата:
и указывать стоит без расширения. Цитата:
Статически можно "подключить" только статичекую библиотеку(*.a и *.lib) . С остальным согласен, плагины более интересная тема. К тому же экспорт классов в DLL делают DLL менее "переносимой" и вариант: Цитата:
Последний раз редактировалось Avazart; 10.05.2016 в 13:48. |
|||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. | 8Observer8 | Qt и кроссплатформенное программирование С/С++ | 12 | 25.06.2015 03:18 |
Пошаговая инструкция. Создание юнит-тестов (модульных тестов) на Qt C++. Разработка через тестирование (TDD - test-driven developm | 8Observer8 | Qt и кроссплатформенное программирование С/С++ | 15 | 26.06.2014 09:33 |
Пошаговая инструкция по Git. Сохранение файлов проекта на удалённый сервер (github.com) | 8Observer8 | Общие вопросы C/C++ | 9 | 23.02.2014 14:48 |
Создание и использование библиотеки DLL | Blew | Помощь студентам | 0 | 06.02.2011 14:56 |
Создание\использование своих DLL библиотек | Vol666 | Общие вопросы Delphi | 5 | 26.08.2009 11:55 |