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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение dll написанной на QT к С++ Builder 6.0  (Прочитано 12310 раз)
StogovOleg
Гость
« : Май 16, 2008, 13:15 »

Есть dll'ка написанная на QT c экспортируемой функцией(например int getMessage() ) в которой создается экземпляр какого-нибудь класса QT (например QMessageBox mb;)
Библиотека подключается к проекту Builder'a( статически или динамически - результат один и тот же) и по нажатию на кнопку вызывается эта внешняя функция - пару секунд приложение думает а потом падает (Access violation ...) ...
если в функции int getMessage() не использовать классы QT а только стандартные типы то все работает нормально!!!

Хотелось бы узнать в чем дело и можно ли вообще так делать:)
Записан
Tonal
Гость
« Ответ #1 : Май 16, 2008, 18:26 »

Какой именно класс тытался создать?
А QApplication создаётся?

Я делал плагины к делфийскому приложению - всё нормально работало. А у них с C++ Builder-ом рантайм одинаковый.
Записан
StogovOleg
Гость
« Ответ #2 : Май 17, 2008, 10:13 »

Какой именно класс тытался создать?
А QApplication создаётся?

Я делал плагины к делфийскому приложению - всё нормально работало. А у них с C++ Builder-ом рантайм одинаковый.

Я пытался создать QMessageBox и QWidget - падает, а QApplication создается нормально...
Записан
Tonal
Гость
« Ответ #3 : Май 17, 2008, 19:52 »

Вот после создания QApplication можно и QMessageBox создавать. :-)
Записан
StogovOleg
Гость
« Ответ #4 : Май 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




Записан
BRE
Гость
« Ответ #5 : Май 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;
char *argv[] = { "prg" };

extern "C" __declspec(dllexport) int getMessage()
{
       QApplication a( argc, argv );
       QMessageBox::information(0, "asdsa", "Asdas");   // падает
       return 100;
}


Но лучше наверное будет создавать объект QApplication, в функции DllMain.
Записан
Tonal
Гость
« Ответ #6 : Май 20, 2008, 07:48 »

Код:
QApplication a(int argc, char** argv)
Это объявление функции.
Объект нужно создавать, как написал BRE или проще:
Код:
QApplication a(0, 0);
Ну а засовывать в DllMain это не нужно, если собираешься модально работать - только диалог показывать например.
В одной функции попроще будет. :-)
Записан
uriel
Гость
« Ответ #7 : Май 20, 2008, 07:58 »

А разве a.exec() потом вызывать не требуется, или это тонкости работы с библиотеками? Улыбающийся
Записан
Alex03
Гость
« Ответ #8 : Май 20, 2008, 08:45 »

А разве a.exec() потом вызывать не требуется, или это тонкости работы с библиотеками? Улыбающийся
QMessageBox::information() имеет свой exec().
Записан
StogovOleg
Гость
« Ответ #9 : Май 21, 2008, 14:15 »

С прототипом накосячил Шокированный согласен Строит глазки

после создания QApplication создается все остальное:)

Всем огромное спасибо за помощь Крутой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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