在Qt中使用带有msvc2008编译器的afx_msg

时间:2011-06-14 21:53:48

标签: c++ visual-studio-2008 qt visual-c++ afx

正如标题所示,我正在使用msvc2008编译器在Qt中开发一个项目。

我正在尝试使用的示例代码使用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 个答案:

答案 0 :(得分:1)

如何执行错误消息所说的内容以及#define预处理程序符号_AFXDLL。根据您的构建环境,您只需将其作为参数添加到编译器命令行(/D_AFXDLL,如果我没记错的话)。但是当你使用Qt时,你可能还是有一个* .pro文件,可以在那里添加它(使用DEFINES变量)。所以只需将此行添加到* .pro文件

DEFINES += _AFXDLL

但是只是将MFC代码集成到Qt应用程序(这是两个完全不同的GUI和OS抽象库)中将不会有太大的帮助,因为它们都不能很好地协同工作,更不用说设计了问题。也许您可以将应用程序从MFC移植到Qt。

答案 1 :(得分:0)

它基本上说你必须使用静态库或DLL。你不能混。

就像你说的,这是项目设置的一部分。