Использование AFX_MSG в QT с компилятором MSVC2008
-
28-10-2019 - |
Вопрос
Я работаю над проектом в QT с компилятором MSVC2008, как говорится в заголовке.
Пример кода, с которым я пытаюсь работать, использует AFX_MAPS, и, насколько я могу судить (у меня нет подсказки, как работает AFX), код ниже означает, что когда сообщение WM_PI_RAWDATA_READY получено (получено ( Я понятия не имею, где или как это получено), функция OnRawDataready запускается.
//{{AFX_MSG_MAP(CPDImfcDlg)
ON_MESSAGE(WM_PI_RAWDATA_READY, OnRawDataReady )
//}}AFX_MSG_MAP
Я попытался скопировать код в свой проект, а затем добавил #include в заголовок, но он дает мне следующую ошибку:
D:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE\afx.h:24: error: C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Исправления, которые я нашел в другом месте для этого, кажутся настройками проекта в Visual Studio, поэтому я не уверен, как это обойти.
Есть идеи о том, как это исправить, или как обойти вещи AFX_MSG?
Большое спасибо
Решение
Как насчет того, чтобы просто сделать то, что сказано в сообщении об ошибке, и #define
в _AFXDLL
Препроцессорный символ. В зависимости от вашей среды сборки, вам просто нужно добавить ее в командную строку Cellier в качестве аргумента (/D_AFXDLL
, если я правильно помню). Но когда вы работаете с QT, у вас, вероятно, есть файл *.pro в любом случае и просто можете добавить его там (используя DEFINES
переменная). Так что просто добавьте вам эту строку *.pro файл
DEFINES += _AFXDLL
Но просто интеграция кода MFC в приложение QT (которые представляют собой две совершенно разные библиотеки абстракции GUI и ОС) не будет слишком помогать, поскольку они оба не будут работать вместе, не чтобы говорить о проблеме дизайна. Возможно, вы можете перенести приложение из MFC в QT.
Другие советы
В основном говорится, что вы должны использовать статические библиотеки или DLL. Вы не можете смешать.
Как вы говорите, это часть настройки проекта.