Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Qt dll in the MFC project

Автор: minigo 6.7.2010, 22:50

Всем привет. Подскажите новичку, возможно ли сделать dll с Qt Gui и использовать её в MFC проекте ? Только мне не желательно грузить её через LoadLibrary, можно ли такую библиотеку прикрепить через lib файл ?

Заранее всем спасибо.

Автор: DIMEDROLL 6.7.2010, 23:16

подключить можно
только зачем? как планируется ее использовать?
Qt GUI требует наличие обьекта QApplication

Автор: minigo 6.7.2010, 23:28

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


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

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


Автор: minigo 7.7.2010, 11:50

У меня сейчас промежуточная проблема, я собрал 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 7.7.2010, 12:22

спасибо, незнал про Qt/MFC Migration Framework
кому интересно, дока http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Windows/qtwinmigrate/


Автор: minigo 7.7.2010, 20:04

Вообщем, день делов и в MFC проект прикрутил библиотеку Qt с диалоговыми окнами при помощи Qt/MFC Migration Framework. Всем спс !

Автор: Алексей1153 7.7.2010, 21:27

Цитата(minigo @ 7.7.2010, 23:04) *
и в MFC проект прикрутил библиотеку Qt с диалоговыми окнами

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

Автор: minigo 8.7.2010, 14:06

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

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


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

Автор: Алексей1153 8.7.2010, 15:57

Неправильный какой-то подход. Проблем будет больше, чем взять, выделить дополнительный час в день для параллельного написания проекта на Qt. Общий код, который без изменений можно использовать и там, и там, писать заново не придётся

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

Автор: minigo 8.7.2010, 16:48

Цитата(Алексей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 8.7.2010, 17:25

Цитата(Алексей1153 @ 8.7.2010, 19:57) *
Неправильный какой-то подход.
еслиб он был неправильный, под него не делали бы целый каркас (framwork) разработки. Совершенно нормальный подход.

Автор: Алексей1153 8.7.2010, 17:30

Цитата(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 8.7.2010, 17:34

Цитата(Алексей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 8.7.2010, 17:46

Хм. Прикольно

Автор: minigo 9.7.2010, 10:35

Цитата(Алексей1153 @ 8.7.2010, 18:46) *
Хм. Прикольно


У нас ещё всё усугубляется тем, что темпы разработки не уменьшаются, а только увеличиваются. Есть ещё одна мысля, из части комплекса, который будет написан на Qt сделать некоторого рода компонент, который могут использовать и другие разработчики. Вобщем планов и мыслей громадьё :rolleyes:

Автор: Алексей1153 9.7.2010, 12:08

Цитата(minigo @ 9.7.2010, 13:35) *
Вобщем планов и мыслей громадьё

да, начальство любит пофантанировать идеями. Записывать не успеваешь иногда :D

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)