0

正如标题所说,我正在使用 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 的任何想法?

非常感谢

4

2 回答 2

1

只做错误消息所说#define的并输入_AFXDLL预处理器符号怎么样。根据您的构建环境,您只需将其作为参数添加到编译器命令行(/D_AFXDLL如果我没记错的话)。但是,当您使用 Qt 时,您可能无论如何都会得到一个 *.pro 文件,并且可以将它添加到那里(使用DEFINES变量)。所以只需将此行添加到您的 *.pro 文件中

DEFINES += _AFXDLL

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

于 2011-06-14T22:23:35.737 回答
0

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

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

于 2011-06-14T21:58:01.053 回答