Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qt dll in the MFC project
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
minigo
Всем привет. Подскажите новичку, возможно ли сделать dll с Qt Gui и использовать её в MFC проекте ? Только мне не желательно грузить её через LoadLibrary, можно ли такую библиотеку прикрепить через lib файл ?

Заранее всем спасибо.
DIMEDROLL
подключить можно
только зачем? как планируется ее использовать?
Qt GUI требует наличие обьекта QApplication
minigo
Цитата(DIMEDROLL @ 7.7.2010, 0:16) *
подключить можно
только зачем? как планируется ее использовать?
Qt GUI требует наличие обьекта QApplication


в dll планирую разместить диалоговые окна, но не хотел бы подгружать её через LoadLibrary.

А прокатит такой вариант, в dll разместить QMyWidget, экспортировать его из dll, а в моём MFC приложении использовать QWinWidget для отображения ?

minigo
У меня сейчас промежуточная проблема, я собрал MFCMigrationFramework, подключил всё к своему MFC проекту, добавил директивы QT_DLL, QT_GUI_LIB, QT_CORE_LIB, QT_THREAD_SUPPORT, QT_QTWINMIGRATE_IMPORT.

после добавляю код
QWinWidget win( theApp.m_pMainWnd );
win.showCentered();
QMessageBox::about( &win, "About QtMfc", "QtMfc Version 1.0\nCopyright (C) 2003" );


и проект перестаёт собираться, ошибка линковки -
MainFrm.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QWinWidget::QWinWidget(class CWnd *,class QObject *,class QFlags<enum Qt::WindowType>)" (__imp_??0QWinWidget@@QAE@PAVCWnd@@PAVQObject@@V?$QFlags@W4WindowType@Qt@@@@@Z)

не подскажите, в чём проблема ?

Цитата(minigo @ 7.7.2010, 12:28) *
У меня сейчас промежуточная проблема, я собрал MFCMigrationFramework, подключил всё к своему MFC проекту, добавил директивы QT_DLL, QT_GUI_LIB, QT_CORE_LIB, QT_THREAD_SUPPORT, QT_QTWINMIGRATE_IMPORT.

после добавляю код
QWinWidget win( theApp.m_pMainWnd );
win.showCentered();
QMessageBox::about( &win, "About QtMfc", "QtMfc Version 1.0\nCopyright (C) 2003" );


и проект перестаёт собираться, ошибка линковки -
MainFrm.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QWinWidget::QWinWidget(class CWnd *,class QObject *,class QFlags<enum Qt::WindowType>)" (__imp_??0QWinWidget@@QAE@PAVCWnd@@PAVQObject@@V?$QFlags@W4WindowType@Qt@@@@@Z)

не подскажите, в чём проблема ?


Исправил, ошибка глупая, надо было по HWND вызывать (либо пересобрать библиотеку)
DIMEDROLL
спасибо, незнал про Qt/MFC Migration Framework
кому интересно, дока тут

minigo
Вообщем, день делов и в MFC проект прикрутил библиотеку Qt с диалоговыми окнами при помощи Qt/MFC Migration Framework. Всем спс !
Алексей1153
Цитата(minigo @ 7.7.2010, 23:04) *
и в MFC проект прикрутил библиотеку Qt с диалоговыми окнами

а скажи честно, какой смысл всего этого ? :) Мне просто интересно.
minigo
Цитата(Алексей1153 @ 7.7.2010, 22:27) *
Цитата(minigo @ 7.7.2010, 23:04) *
и в MFC проект прикрутил библиотеку Qt с диалоговыми окнами

а скажи честно, какой смысл всего этого ? :) Мне просто интересно.


У нас очень крупный проект на MFC, заморозить проект на полгода (а то и больше) чтобы перевести на Qt мы не можем, поэтому была выбрана стратегия перевода для начала всех библиотек проекта, это будет последовательно, позволит не задерживать релизы. На конечном этапе будет задача перевести основное приложение (т.е. основной модуль) на Qt, для этого момента наверно подгадаем месячишко, и наверно сделаем это для пущей безопасности в отдельном ветке SVN'а.
вот поэтому и возникают подобные задачи.
Алексей1153
Неправильный какой-то подход. Проблем будет больше, чем взять, выделить дополнительный час в день для параллельного написания проекта на Qt. Общий код, который без изменений можно использовать и там, и там, писать заново не придётся

Наверное, даже лучше сделать так: Берёте проект на MFC и отделяете код GUI и WinAPI от "чистого кода" (который без изменений и на Qt будет работать). Тогда останется тольго Gui написать, на остальное время и силы тратить не надо. А ещё и отлаживать рабочий код не надо.
minigo
Цитата(Алексей1153 @ 8.7.2010, 16:57) *
Неправильный какой-то подход. Проблем будет больше, чем взять, выделить дополнительный час в день для параллельного написания проекта на Qt. Общий код, который без изменений можно использовать и там, и там, писать заново не придётся


безусловно, первое что мы делаем, это пишем новые компоненты на Qt, а не переписываем старые. Во вторых, часть нашего комплекса нам поставляется другой конторой в виде кучи библиотек, и наша задача сделать так, чтобы не зависеть только от этого поставщика, для этого у нас одновременно с написанием новых компонентов на Qt проходит переоценка архитектуры, переделываем вообщем и перетаскиваем некоторые старые компоненты под Qt В третьих, часа в день будет ооооочень мало, проекту уже фактически 3 года, и писали его очень интенсивно.

Цитата(Алексей1153 @ 8.7.2010, 16:57) *
Наверное, даже лучше сделать так: Берёте проект на MFC и отделяете код GUI и WinAPI от "чистого кода" (который без изменений и на Qt будет работать). Тогда останется тольго Gui написать, на остальное время и силы тратить не надо. А ещё и отлаживать рабочий код не надо.


а ты писал на MFC когда нибудь ? особенно крупные проекты ? скажу честно, проект экспериментальный, местами сильно гуй переплёлся с основным кодом, и так легко на бегу отделить его от основного кода невозможно. Да и если честно, даже крупные проекты надо постоянно переписывать, дабы внедрять новые подходы и технологии.

Поэтому переход на новую платформу планируется делать постепенно, реализовывая сначала новые компоненты на Qt, и постепенно перенося старые - естественно с модернизацией !
Litkevich Yuriy
Цитата(Алексей1153 @ 8.7.2010, 19:57) *
Неправильный какой-то подход.
еслиб он был неправильный, под него не делали бы целый каркас (framwork) разработки. Совершенно нормальный подход.
Алексей1153
Цитата(minigo @ 8.7.2010, 19:48) *
а ты писал на MFC когда нибудь ? особенно крупные проекты ?

это моя основная работа последние лет пять

Цитата(minigo @ 8.7.2010, 19:48) *
местами сильно гуй переплёлся с основным кодом, и так легко на бегу отделить его от основного кода невозможно.

ну да, так бывает, когда только начинают первые проекты делать - потом с опытом так уже перестают делать. Но, тем более такие места надо переделывать нормально - раздельно логику и гуи :)

Цитата(Litkevich Yuriy @ 8.7.2010, 20:25) *
еслиб он был неправильный, под него не делали бы целый каркас (framwork) разработки. Совершенно нормальный подход.

насколько я понимаю, этот фрейворк сделан для другой цели - подружить уже готовые классы Qt с кодом MFC. А тут задача другая - переписать MFC проект в Qt проект
Litkevich Yuriy
Цитата(Алексей1153 @ 8.7.2010, 21:30) *
насколько я понимаю, этот фрейворк сделан для другой цели - подружить уже готовые классы Qt с кодом MFC. А тут задача другая - переписать MFC проект в Qt проект
Цитата
Qt/MFC Migration Framework

The Qt/MFC Migration Framework tool assists in the migration of existing Win32 or MFC applications to the Qt toolkit.
Алексей1153
Хм. Прикольно
minigo
Цитата(Алексей1153 @ 8.7.2010, 18:46) *
Хм. Прикольно


У нас ещё всё усугубляется тем, что темпы разработки не уменьшаются, а только увеличиваются. Есть ещё одна мысля, из части комплекса, который будет написан на Qt сделать некоторого рода компонент, который могут использовать и другие разработчики. Вобщем планов и мыслей громадьё :rolleyes:
Алексей1153
Цитата(minigo @ 9.7.2010, 13:35) *
Вобщем планов и мыслей громадьё

да, начальство любит пофантанировать идеями. Записывать не успеваешь иногда :D
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.