我正在使用Visual Studio 2011中的Win32项目。当我包含afx.h或afxwin.h时,它正在生成MFC错误。为了解决这个问题,我在Project Properties选项卡中进行了以下更改: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错误,我该如何删除此错误。请指导我。
在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
我有同样的问题,但只有当我意识到必须为调试和发布配置设置“在共享DLL中使用MFC”标志时才解决它(我只设置了它用于调试)。
根据我的经验,这是一个双向的步骤。假设您想要STATIC链接:a)设置“在静态库中使用MFC”b)在stdafx.h中添加:#define _AFXDLL 1
适用于VS 2012
我遇到了类似的问题。在我的情况下,它是由附加到单个cpp文件的设置引起的。由于它们包含预处理程序符号,因此它们实际上阻止了利用预处理程序符号的项目(或道具)级别设置。
因此,请检查vcxproj中是否有文件级别设置。如果这样做,请检查它们是否等于项目级别设置。如果是,您可以安全地删除它们。如果存在差异,则必须对其进行排序。
Cpp文件级别设置通常应为空(当您需要它们时有一些例外),但很容易偶然添加它们。
我收到此错误,因为我没有正确地将项目的配置设置为“在共享DLL中使用MFC”。我的错误是我只为Release模式设置了这个选项,当我在Debug模式下编译时出现了这个错误。应用Debug和Release模式配置的设置解决了我的问题。
以下是设置:
项目 - >“项目”属性 - >配置属性 - >常规 - >项目默认值 - >使用MFC:在共享DLL中使用MFC
通过项目配置设置间接添加#define _AFXDLL