错误请#define _AFXDLL或在项目属性中进行更改后不要使用/ MD [d]

时间:2014-07-30 07:25:54

标签: visual-c++ dll mfc

我正在使用Visual Studio 2011中的Win32项目。当我包含afx.h或afxwin.h时,它正在生成MFC错误。 为解决此问题,我在“项目属性”选项卡中进行了以下更改: 1)MFC的使用:在共享DLL中使用MFC 2)C ++ - >代码生成 - >运行时库 - >多线程调试DLL(/ MDd)

构建解决方案时,它仍然会出现以下错误:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\vc\atlmfc\include\afx.h(24): fatal 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]

我的问题是为什么Win32项目正在生成MFC错误,我应该如何删除此错误。请指导我。

8 个答案:

答案 0 :(得分:37)

在Visual Studio 2011上,这对我有用:

Project -> "project" Properties -> Configuration Properties -> C/C++ -> Advanced -> Show Includes: YES(/showIncludes)

Project -> "project" Properties -> Configuration Properties -> General -> Project Defaults -> Use of MFC : Use MFC in a shared DLL

答案 1 :(得分:12)

我遇到了同样的问题,但只有当我意识到我必须为调试和发布配置设置“在共享DLL中使用MFC”标志时才解决它(我只将其设置为调试)。

答案 2 :(得分:5)

根据我的经验,这是一个双向的步骤。 假设你想要STATIC链接: a)设置“在静态库中使用MFC ” b)添加:  #define _AFXDLL 1 在stdafx.h中

适用于VS 2012

答案 3 :(得分:1)

我遇到了类似的问题。在我的情况下,它是由附加到单个cpp文件的设置引起的。由于它们包含预处理程序符号,因此它们实际上阻止了使用预处理程序符号的项目(或道具)级别设置。

因此,请检查vcxproj中是否有文件级别设置。如果这样做,请检查它们是否等于项目级别设置。如果是,您可以安全地删除它们。如果存在差异,则必须对其进行排序。

Cpp文件级别设置通常应为空(当您需要它们时会有一些例外情况),但是很容易将它们添加起来。

答案 4 :(得分:0)

我收到此错误是因为我没有将项目的配置正确设置为“ 在共享DLL中使用MFC ”。我的错误是我仅在 Release 模式下设置了此选项,而当我在 Debug 模式下进行编译时,遇到了此错误。将设置应用于“调试和发布”模式配置对我来说都解决了这个问题。

以下是设置:

项目->“项目”属性->配置属性->常规->项目默认设置->使用MFC:在共享DLL中使用MFC

答案 5 :(得分:0)

  1. 打开

    项目属性->配置属性-> C / C ++->代码生成->运行时库

  2. 在“运行时库”部分中选择多线程(/ MT)。

这将消除您的错误。享受。

答案 6 :(得分:0)

对我来说,目标必须从x64更改为x86。

答案 7 :(得分:-4)

通过项目配置设置间接添加#define _AFXDLL