【问题标题】:C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>C1189:#error:WINDOWS.H 已包含在内。 MFC 应用程序不得#include <windows.h>
【发布时间】:2014-03-10 14:48:12
【问题描述】:

我正在构建一个 C++ 项目,其中包含 2 个库,其中隐含包含 2 次 windows.h

  1. afxwin.h
  2. atlbase.h(不确定)

知道我的项目中需要这两个库,我该如何解决这个问题?

请问有什么绝妙的主意吗?

【问题讨论】:

标签: c++ windows mfc atl


【解决方案1】:

尝试使用某些外观接口隐藏提及的库,这些包含在同一编译单元中不可见。

【讨论】:

  • 感谢您的回复博格丹。能详细点吗?
  • @user3289501:我会创建两个接口,比如说 Lib1 和 Lib2,并在他们的实现中隐藏使用有问题的标头。假设 afxwin.h 为您提供了方法 foo(),因此您可以添加使用原始 foo() 的方法 Lib1::foo()。一般来说,任何使用有问题的库的操作都可以通过这种方式隐藏。
  • 非常感谢博格丹!!
  • @Bogdan 你能给出更实际的解释吗?我不完全明白你的意思。
  • @k4rlsson 假设您想使用 atlstr.h 中的 CString::Trim。假设由于标题冲突,您不能就地使用它。所以我建议用函数声明 TrimString(char*) 和内部 trim_string.cpp 制作一个使用 CString 的 TrimString 定义。这样,您可以使用外观从其余代码中隐藏 CString 和 atlstr.h。
【解决方案2】:

我在 Visual Studio 2010 中构建 Win32 应用程序时遇到了同样的问题。对我有用的解决方案是:

  1. 打开 stdafx.h
  2. #include &lt;windows.h&gt; 替换为#include &lt;afxwin.h&gt;

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2014-04-29
    • 2016-05-17
    • 1970-01-01
    • 2014-11-29
    • 2013-01-07
    • 1970-01-01
    • 2011-10-08
    • 2011-03-06
    相关资源
    最近更新 更多