Название: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 07, 2007, 10:42 Ситуация такая:
class A находится в a.dll A наследуется от QThread. В нем есть сигналы/слоты. class B: public A и находится он в главном приложении. У класса B есть сигнал: Код: class B: public A Под линуксом все работает. В виндах вылетает окно "Ошибка инициализации приложения". Если убрать макрос Q_OBJECT, то приложение запускается. В чем проблема? qt-4.2.2, mingw, g++ 3.4.2 Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 10, 2007, 07:25 Провел эксперимент. Соэдал небольшой проект - 2 штуки.
Dll: Код: class A: public QThread Главное приложение: Код: class B: public A{ Приложение вылетает с сообщением: Ошибка инициализации приложения (0xc0000005). winXp, qt4.2.2, mingw, g++ 3.4.2 Что не так? ??? Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: Sergeich от Сентябрь 10, 2007, 12:45 А где экспорт в DLL?
Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 10, 2007, 13:50 А где экспорт в DLL? В смысле? Разве сдесь нужен экспорт? под лин все работает. Да и еще есть другая dll, там класс лежит свой (не qt). она тож работает нормально... хм :-\ Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: pastor от Сентябрь 10, 2007, 15:52 Разве сдесь нужен экспорт? под лин все работает. Деректив экспортов\импортов под линуксом нет. Это WIN приблуда. Поэтому в линуксе все и работает. Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: Sergeich от Сентябрь 10, 2007, 16:14 В винде чтобы сделать какой-нить класс доступным из DLL, его сначала надо экспортировать:
Код: class __declspec(dllexport) A: public QThread Код: #ifdef Q_WS_WIN Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 15, 2007, 07:38 хм.
Переписал заголовочный файл dll'ки: Код: #ifdef Q_WS_WIN Вылетает с той же ошибкой... PS есть у меня еще одна dll, с реализацией протокола modbus. Там нет директив импорта/экспорта у классов. Она работает под вин и линукс. PPS Нашел пост на qtcentre. Там у парня такая же проблема. Но чет я не понял, решил ли он ее или нет. http://www.qtcentre.org/forum/f-qtopia-14/t-dll-application-6474.html (http://www.qtcentre.org/forum/f-qtopia-14/t-dll-application-6474.html) Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 17, 2007, 06:42 А тут нельзя где-нить выложить код с тестовой программой и dll? А то мож у меня проблемы не в коде, а где-нибудь в системе... Кто бы откомпиллил у себя..
Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: Вячеслав от Сентябрь 17, 2007, 07:43 Кидай - гляну . ЕСли здесь низя то v n [Г а в] s t e c h . s p b . r u
Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 17, 2007, 11:42 Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: ритт от Сентябрь 17, 2007, 12:10 ну экспорт ты добавил. а импорт?
Код: #include <Qt/qglobal.h> что для венды будет означать: Код: #include <Qt/qglobal.h> а для лялихов - пустоту :) когда собираешь либу, указывай DEFINES+=MD_DLL когда линкуешься к либе - не указывай всё. иди и наследуйся. если это не поможет, из кода в начале предполагаю ещё затруднения...но это если не поможет :) Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: Вячеслав от Сентябрь 17, 2007, 12:32 moc_main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const A::staticMetaObject" (?staticMetaObject@A@@2UQMetaObject@@B) ..\test_app.exe : fatal error LNK1120: 1 unresolved externals Это VS2005 высказываеться ...... Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 17, 2007, 13:07 Да. Нашел ошибку. +1 to ритт. Не дописал импорт.
У меня было: Код: #ifdef Q_WS_WIN Надо: Код: #ifdef Q_WS_WIN MD_DLL - при сборке приложения/библиотеки, использующего(ей) библиотеку 1. Теперь все нормально компилится win, qt-4.2.2 opensource, mingw. Спасибо всем. to Вячеслав: благодарствую, что не поленился откомпиллить. Все от незнания. Под винды не знаю и не люблю писАть. Можно закрыть. Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: ритт от Сентябрь 17, 2007, 13:23 блин...
а я только что твой тест регенерировал и собрал успешно - хотел рабочий код кинуть :) Название: Re: [Qt 4.2.2] Наследование класса, находящегося в dll Отправлено: vregess от Сентябрь 18, 2007, 06:26 :) Извини) Знал бы - не постил бы решение)))
|