Russian Qt Forum
Ноябрь 27, 2024, 10:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: DllMain Wrapper  (Прочитано 4422 раз)
FAngel
Гость
« : Сентябрь 13, 2010, 22:27 »

Доброго времени суток!
Передо мной стоит задача оформить некоторые исходники в виде динамически загружаемой библиотеки. Библиотека должна быть переносимой и собираться под Windows и Mac в разные сущности. На сколько я знаю у QT проблем с этой задачей нету. Однако меня интересует некто вроде метода DllMain, а именно нечто кроссплатформеное, что будет дергаться при загрузке библиотеки.
Вопрос : есть ли какой-нибудь врапер внутрях QT, или придется городить колбасу #ifdef...#endif ?

Заранее спасибо.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Сентябрь 13, 2010, 22:35 »

зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс?
Записан
Blackwanderer
Гость
« Ответ #2 : Сентябрь 14, 2010, 06:52 »

Цитировать
зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс?
Это для плагинов. Обычную библиотеку просто линкуешь и все. Подключаешь заголовочные файлы и пользуешься всем, что написано в библиотеке точно так же, как если бы это было написано в основной программе. В самой библиотеке нужно лишь пометить нужные функции/классы как Q_DECL_EXPORT/Q_DECL_IMPORT. Обо всем остальном позаботится Qt.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Сентябрь 14, 2010, 10:05 »

а, понял, ступил)
в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы
Записан
FAngel
Гость
« Ответ #4 : Сентябрь 14, 2010, 10:10 »

Вы меня не правильно поняли. Как экспортировать функции, классы я знаю. Мне нужно что бы при загрузке длл вызывалась некоторая функция, которая будет проводить некоторую инициализацию. То есть что бы не я дергал нечто, а что бы нечто вызывалось само при загрузке длл в память.

В частности опишу задачу. Есть некоторая длл представляющая собой аудио плагин формата vst. Данный плагин грузиться хостом, который дергает определенные функции. Однако при загрузке длл мне нужно произвести плаформенно зависимую инициализацию, к примеру. Под виндой это можно сделать в функции DllMain. Но плагин будет так же компилиться под Mac и возможно, если стандартизируют VST под Linux, то и под Linux.

Собственно повторно вопрос. Есть ли у Qt врапер над входной функций Dll (и аналогов под другими системами).
Записан
FAngel
Гость
« Ответ #5 : Сентябрь 14, 2010, 10:10 »

а, понял, ступил)
в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы

Отлично! Это именно то что нужно. А имя макроса не подскажете?
Записан
FAngel
Гость
« Ответ #6 : Сентябрь 17, 2010, 16:39 »

Неужто никто не знает как зовется этот макрос?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Сентябрь 17, 2010, 19:27 »

ну пример с ними я продолбал:)
Записан
SASA
Гость
« Ответ #8 : Сентябрь 20, 2010, 10:45 »

Как подгружается dll?
Если подгружается динамически, то используйте созданный для этого механизм плагинов.
Если статически (сразу залинковона), то прям в мейне вызовете эту функцию
например:

Код:
//dll
void Q_DECL_EXPORT/Q_DECL_IMPORT init()
{
   ...
}

//app
int main()
{
   init();
   ...
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.