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

问题描述 投票:36回答:6

我正在使用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-c++ dll mfc
6个回答
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


12
投票

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


5
投票

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

适用于VS 2012


1
投票

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

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

Cpp文件级别设置通常应为空(当您需要它们时有一些例外),但很容易偶然添加它们。


0
投票

我收到此错误,因为我没有正确地将项目的配置设置为“在共享DLL中使用MFC”。我的错误是我只为Release模式设置了这个选项,当我在Debug模式下编译时出现了这个错误。应用Debug和Release模式配置的设置解决了我的问题。

以下是设置:

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


-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.