Russian Qt Forum
Ноябрь 27, 2024, 10:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
DllMain Wrapper
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: DllMain Wrapper (Прочитано 4429 раз)
FAngel
Гость
DllMain Wrapper
«
:
Сентябрь 13, 2010, 22:27 »
Доброго времени суток!
Передо мной стоит задача оформить некоторые исходники в виде динамически загружаемой библиотеки. Библиотека должна быть переносимой и собираться под Windows и Mac в разные сущности. На сколько я знаю у QT проблем с этой задачей нету. Однако меня интересует некто вроде метода DllMain, а именно нечто кроссплатформеное, что будет дергаться при загрузке библиотеки.
Вопрос : есть ли какой-нибудь врапер внутрях QT, или придется городить колбасу #ifdef...#endif ?
Заранее спасибо.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: DllMain Wrapper
«
Ответ #1 :
Сентябрь 13, 2010, 22:35 »
зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс?
Записан
Blackwanderer
Гость
Re: DllMain Wrapper
«
Ответ #2 :
Сентябрь 14, 2010, 06:52 »
Цитировать
зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс?
Это для плагинов. Обычную библиотеку просто линкуешь и все. Подключаешь заголовочные файлы и пользуешься всем, что написано в библиотеке точно так же, как если бы это было написано в основной программе. В самой библиотеке нужно лишь пометить нужные функции/классы как Q_DECL_EXPORT/Q_DECL_IMPORT. Обо всем остальном позаботится Qt.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: DllMain Wrapper
«
Ответ #3 :
Сентябрь 14, 2010, 10:05 »
а, понял, ступил)
в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы
Записан
FAngel
Гость
Re: DllMain Wrapper
«
Ответ #4 :
Сентябрь 14, 2010, 10:10 »
Вы меня не правильно поняли. Как экспортировать функции, классы я знаю. Мне нужно что бы при загрузке длл вызывалась некоторая функция, которая будет проводить некоторую инициализацию. То есть что бы не я дергал нечто, а что бы нечто вызывалось само при загрузке длл в память.
В частности опишу задачу. Есть некоторая длл представляющая собой аудио плагин формата vst. Данный плагин грузиться хостом, который дергает определенные функции. Однако при загрузке длл мне нужно произвести плаформенно зависимую инициализацию, к примеру. Под виндой это можно сделать в функции DllMain. Но плагин будет так же компилиться под Mac и возможно, если стандартизируют VST под Linux, то и под Linux.
Собственно повторно вопрос. Есть ли у Qt врапер над входной функций Dll (и аналогов под другими системами).
Записан
FAngel
Гость
Re: DllMain Wrapper
«
Ответ #5 :
Сентябрь 14, 2010, 10:10 »
Цитата: Авварон от Сентябрь 14, 2010, 10:05
а, понял, ступил)
в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы
Отлично! Это именно то что нужно. А имя макроса не подскажете?
Записан
FAngel
Гость
Re: DllMain Wrapper
«
Ответ #6 :
Сентябрь 17, 2010, 16:39 »
Неужто никто не знает как зовется этот макрос?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: DllMain Wrapper
«
Ответ #7 :
Сентябрь 17, 2010, 19:27 »
ну пример с ними я продолбал:)
Записан
SASA
Гость
Re: DllMain Wrapper
«
Ответ #8 :
Сентябрь 20, 2010, 10:45 »
Как подгружается dll?
Если подгружается динамически, то используйте созданный для этого механизм плагинов.
Если статически (сразу залинковона), то прям в мейне вызовете эту функцию
например:
Код:
//dll
void Q_DECL_EXPORT/Q_DECL_IMPORT init()
{
...
}
//app
int main()
{
init();
...
}
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...