Название: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: StogovOleg от Май 16, 2008, 13:15 Есть dll'ка написанная на QT c экспортируемой функцией(например int getMessage() ) в которой создается экземпляр какого-нибудь класса QT (например QMessageBox mb;)
Библиотека подключается к проекту Builder'a( статически или динамически - результат один и тот же) и по нажатию на кнопку вызывается эта внешняя функция - пару секунд приложение думает а потом падает (Access violation ...) ... если в функции int getMessage() не использовать классы QT а только стандартные типы то все работает нормально!!! Хотелось бы узнать в чем дело и можно ли вообще так делать:) Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: Tonal от Май 16, 2008, 18:26 Какой именно класс тытался создать?
А QApplication создаётся? Я делал плагины к делфийскому приложению - всё нормально работало. А у них с C++ Builder-ом рантайм одинаковый. Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: StogovOleg от Май 17, 2008, 10:13 Какой именно класс тытался создать? А QApplication создаётся? Я делал плагины к делфийскому приложению - всё нормально работало. А у них с C++ Builder-ом рантайм одинаковый. Я пытался создать QMessageBox и QWidget - падает, а QApplication создается нормально... Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: Tonal от Май 17, 2008, 19:52 Вот после создания QApplication можно и QMessageBox создавать. :-)
Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: StogovOleg от Май 19, 2008, 12:59 Вот после создания QApplication можно и QMessageBox создавать. :-) Что-то ничего не получается:( QApplication создается а QMessageBox и т.д. падает!!! Вот код библиотеки, может что-то не так: #include <QApplication> #include <QMessageBox> extern "C" __declspec(dllexport) int getMessage() { QApplication a(int argc, char** argv); //обьект создается QMessageBox::information(0, "asdsa", "Asdas"); // падает return 1; } если закоментировать создание QT'шных обьектов то функция возвращает 1 Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: BRE от Май 19, 2008, 13:19 Вот код библиотеки, может что-то не так: #include <QApplication> #include <QMessageBox> extern "C" __declspec(dllexport) int getMessage() { QApplication a(int argc, char** argv); // Объект не создается!!! Это прототип... QMessageBox::information(0, "asdsa", "Asdas"); // падает return 1; } На вскидку попробуй так Код: int argc = 1; Но лучше наверное будет создавать объект QApplication, в функции DllMain. Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: Tonal от Май 20, 2008, 07:48 Код: QApplication a(int argc, char** argv) Объект нужно создавать, как написал BRE или проще: Код: QApplication a(0, 0); В одной функции попроще будет. :-) Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: uriel от Май 20, 2008, 07:58 А разве a.exec() потом вызывать не требуется, или это тонкости работы с библиотеками? :)
Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: Alex03 от Май 20, 2008, 08:45 А разве a.exec() потом вызывать не требуется, или это тонкости работы с библиотеками? :) QMessageBox::information() имеет свой exec().Название: Re: Подключение dll написанной на QT к С++ Builder 6.0 Отправлено: StogovOleg от Май 21, 2008, 14:15 С прототипом накосячил :o согласен ::)
после создания QApplication создается все остальное:) Всем огромное спасибо за помощь 8) |