Войти
ПрограммированиеФорумОбщее

MFC Qt и CUDA

#0
20:19, 29 дек. 2012

Есть проект, в котором в перемешку используется и Qt и MFC (не интерфейс). И вот я решил добавить в этот проект функции для работы с CUDA. Но достаточно было мне подключить к проекту файл с расширением *.cu, скомпилировать его компилятором nvidia и собрать проект, как программа переставала запускаться. Исключив файл из проекта и собрав по новой получал снова рабочую программу. Запустив прогу в дебаге увидел где она ломается. Оказалось каким-то боком вызывается WinMain от MFC, а не от Qt. Там то она благополучно и отдает концы. Если кто сталкивался с такой проблемой, подскажите, что делать.


#1
20:25, 29 дек. 2012

Забыл добавить. Проект был создан как Qt в 2010й студии. Потом уже в него был добавлен старый код, использующий MFC и подключены библиотеки для работы с  MFC. И вот получается странная ситуация, стоит компилятору CUDA выйти на сцену, как программа наинает стартовать из MFCшной WinMain, хотя до этого нормально запусклась из Qtшной.

#2
20:40, 29 дек. 2012

Что мешает использовать только Qt? Или же только MFC? Я вообще не представлял, что их можно смешать в одном проекте

#3
20:49, 29 дек. 2012

Мешает то, что есть много старого кода, в котором используются всякие CString, CPoint, CFile, BITMAPINFOHEADER (правда это вроде уже не мфс) и тому подобное. Отказаться от этого кода в проекте я не могу, а вычищать, все что связано мфс, заменяя это классами из stl или Qt совсем не хочется.

#4
21:03, 29 дек. 2012

А проект Qt файл .pro или солюшен вижуал студии? Копать надо явно там

#5
21:16, 29 дек. 2012

Файл студийный, был создан в самой студии, с помощью Qt Visual Studio Add-in. Собственно если ты с этим не сталкивался, то помочь мне вряд-ли сможешь, тут мне самому копать надо. Но что-то плохо копается :) Поэтому надеюсь, что кто-то уже с таким сталкивался и смог разобраться. А то придется выносить реализацию на CUDA в DLL или пытаться вычистить из проекта MFC (а вдруг и после этого не запашет :) )

#6
22:58, 29 дек. 2012

Я часто сталкивался с тем что линковка не проходила из-за того, что он хотел WinMain вместо main или наоборот. Но меня смутило то, что она таки нашла другой мейн и мне тяжело представить, какое спагетти у тебя в проекте

#7
19:25, 1 янв. 2013

рефакторинг , вот что нужно этому проекту, в Qt есть все.
переделывай, а не накладывай еще лапши !!!!

Прошло более 1 года
#8
15:18, 20 янв. 2014

Tolanay
Ситуация бывает еще неприятнее - вот есть аппликация, сбацанная на MFC у клиента и они не хотят давать ишодники дабы мы своими силами отмигрировали ее на  Qt. А еще есть туева хуча кода в Qt DLL, который динамически подгружается в MFC application. И MFCшный код валится на выходе, уже после FreeLibrary для Qt DLL.
Причем валится лишь когда в Qt заускаицца всяка хрень шо свой event loop стряпает, если пользуемся лишь функционалом QCore, то конечно нет проблем. И как стаким бороться? Уносить функционал Qt DLL в другой process и трахаться с IPC? Можно и не успеть - Qt DLL сам еще и с железкой общается, там вааще-то идет некий real-time процесс. Так что вот как тут выкрутиться???

#9
15:32, 20 янв. 2014

Tolanay
> Запустив прогу в дебаге увидел где она ломается. Оказалось каким-то боком
> вызывается WinMain от MFC, а не от Qt
это из за CUDA? :-)  Такого быть не может. CUDA тут не причём.
Код покажи

ПрограммированиеФорумОбщее

Тема в архиве.