Использование afx_msg в Qt с компилятором msvc2008
Я работаю над проектом в 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?
Большое спасибо
2 ответа
Как насчет просто делать то, что говорится в сообщении об ошибке и #define
в _AFXDLL
символ препроцессора. В зависимости от вашей среды сборки вам просто нужно добавить его в командную строку компилятора в качестве аргумента (/D_AFXDLL
, если я правильно помню). Но когда вы работаете с Qt, вы, вероятно, все равно получили файл *.pro и можете просто добавить его туда (используя DEFINES
переменная). Так что просто добавьте эту строку в ваш *.pro файл
DEFINES += _AFXDLL
Но простая интеграция кода MFC в приложение Qt (которые представляют собой две совершенно разные библиотеки абстракций GUI и ОС) не слишком поможет, так как они оба не будут так хорошо работать вместе, не говоря уже о проблеме дизайна. Возможно, вы можете портировать приложение с MFC на Qt.
В основном это говорит о том, что вы должны использовать статические библиотеки или библиотеки DLL. Вы не можете смешивать.
Как вы говорите, это часть настроек проекта.