【问题标题】:error Please #define _AFXDLL or do not use /MD[d] occurs even after making changes in Project Properties错误请 #define _AFXDLL 或不使用 /MD[d] 即使在项目属性中进行更改后也会发生
【发布时间】:2021-08-28 23:42:54
【问题描述】:

我正在 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 错误,我应该如何消除这个错误。请指导我。

【问题讨论】:

  • 你为什么不照它说的去做并#define _AFXDLL? C/C++、预处理器、预处理器定义设置。
  • 查看构建日志文件 - 确保在为编译发出的命令行中有 /D _AFXDLL。 “在共享 DLL 中使用 MFC”应该会导致这种情况发生。也许清理/重建可能会有所帮助?另外,VC++11 是 Visual Studio 2012。
  • 感谢汉斯·帕桑特。我在预处理器定义中添加了 _AFXDLL。但它仍然给出同样的错误。
  • 项目类型是什么? (dll?静态库?exe?)
  • 检查 Michael 所说的:在构建日志中,是否有 _AFXDLL?不要手动定义,设置“在共享DLL中使用MFC”时添加。如果它设置在那里,这听起来像是一个陈旧的预处理标题。手动删除所有不是源文件、项目文件或资源的内容并重新构建。

标签: visual-c++ dll mfc


【解决方案1】:

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

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

(在 Visual Studio 2019 中,后一种设置可以在“Properties -> Configuration Properties -> Advanced -> Use of MFC”中找到

【讨论】:

  • 谁能解释一下为什么这个答案被赞成而另一个没有? “在共享 DLL 中使用 MFC”添加了 /D“_AFXDLL”,因此它以一种更神秘(微软)的方式完全相同。而且我不知道 /showIncudes 与这个问题有什么关系......
  • 不需要添加 /showIncludes 标志,但感谢您指出使用 MFC 设置。
  • 另外,帖子的作者说他已经将项目属性设置为在共享DLL中使用MFC,但没有解决错误。坦率地说,没有一个答案真正回答了最初的问题。
  • /showIncludes 将打印所有包含的文件。来源:docs.microsoft.com/en-us/cpp/build/reference/…
  • 感谢您指出 /showIncludes 对解决此问题是不必要的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    根据我的经验,有两种方法。 假设您想要静态链接: a) 设置“在静态库中使用 MFC” b) 添加: #define _AFXDLL 1 在 stdafx.h 中

    适用于 VS 2012

    【讨论】:

      【解决方案4】:

      我也遇到过类似的问题。就我而言,这是由附加到单个 cpp 文件的设置引起的。由于它们包含预处理器符号,它们实际上阻止了使用预处理器符号的项目(或道具)级别设置。

      因此请检查您的 vcxproj 中是否有文件级别设置。如果这样做,请检查它们是否等于项目级别设置。如果是,您可以安全地删除它们。如果有差异,你必须解决它。

      Cpp 文件级别设置通常应该为空(需要时有一些例外),但很容易意外添加。

      【讨论】:

        【解决方案5】:

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

        以下是设置:

        Project -> "project" Properties -> Configuration Properties -> General -> Project Defaults -> Use of MFC :在共享 DLL 中使用 MFC

        【讨论】:

          【解决方案6】:
          1. 打开

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

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

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

          【讨论】:

            【解决方案7】:

            我也遇到了同样的错误。错误信息一目了然。

            您需要在您的AFX.h 文件中添加#define _AFXDLL

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-07-16
                • 1970-01-01
                • 2014-04-08
                • 2020-11-18
                • 1970-01-01
                • 2011-05-12
                相关资源
                最近更新 更多