Название: DllMain Wrapper Отправлено: FAngel от Сентябрь 13, 2010, 22:27 Доброго времени суток!
Передо мной стоит задача оформить некоторые исходники в виде динамически загружаемой библиотеки. Библиотека должна быть переносимой и собираться под Windows и Mac в разные сущности. На сколько я знаю у QT проблем с этой задачей нету. Однако меня интересует некто вроде метода DllMain, а именно нечто кроссплатформеное, что будет дергаться при загрузке библиотеки. Вопрос : есть ли какой-нибудь врапер внутрях QT, или придется городить колбасу #ifdef...#endif ? Заранее спасибо. Название: Re: DllMain Wrapper Отправлено: Авварон от Сентябрь 13, 2010, 22:35 зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс?
Название: Re: DllMain Wrapper Отправлено: Blackwanderer от Сентябрь 14, 2010, 06:52 Цитировать зачем вам городить всякие иниты, если есть QPluginLoader, позволяющий получить целиком класс? Это для плагинов. Обычную библиотеку просто линкуешь и все. Подключаешь заголовочные файлы и пользуешься всем, что написано в библиотеке точно так же, как если бы это было написано в основной программе. В самой библиотеке нужно лишь пометить нужные функции/классы как Q_DECL_EXPORT/Q_DECL_IMPORT. Обо всем остальном позаботится Qt.Название: Re: DllMain Wrapper Отправлено: Авварон от Сентябрь 14, 2010, 10:05 а, понял, ступил)
в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы Название: Re: DllMain Wrapper Отправлено: FAngel от Сентябрь 14, 2010, 10:10 Вы меня не правильно поняли. Как экспортировать функции, классы я знаю. Мне нужно что бы при загрузке длл вызывалась некоторая функция, которая будет проводить некоторую инициализацию. То есть что бы не я дергал нечто, а что бы нечто вызывалось само при загрузке длл в память.
В частности опишу задачу. Есть некоторая длл представляющая собой аудио плагин формата vst. Данный плагин грузиться хостом, который дергает определенные функции. Однако при загрузке длл мне нужно произвести плаформенно зависимую инициализацию, к примеру. Под виндой это можно сделать в функции DllMain. Но плагин будет так же компилиться под Mac и возможно, если стандартизируют VST под Linux, то и под Linux. Собственно повторно вопрос. Есть ли у Qt врапер над входной функций Dll (и аналогов под другими системами). Название: Re: DllMain Wrapper Отправлено: FAngel от Сентябрь 14, 2010, 10:10 а, понял, ступил) в общем в Qt есть макросы для инита статик переменных, если мне не изменяет память, то там есть макрос, зовущий указанную в нем ф-ию при лоаде либы Отлично! Это именно то что нужно. А имя макроса не подскажете? Название: Re: DllMain Wrapper Отправлено: FAngel от Сентябрь 17, 2010, 16:39 Неужто никто не знает как зовется этот макрос?
Название: Re: DllMain Wrapper Отправлено: Авварон от Сентябрь 17, 2010, 19:27 ну пример с ними я продолбал:)
Название: Re: DllMain Wrapper Отправлено: SASA от Сентябрь 20, 2010, 10:45 Как подгружается dll?
Если подгружается динамически, то используйте созданный для этого механизм плагинов. Если статически (сразу залинковона), то прям в мейне вызовете эту функцию например: Код: //dll |