C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
我正在构建一个C项目,其中包含2个隐式包含2次windows.h:
的库
afxwin.h
atlbase.h(不确定)
知道我的项目中需要这两个库,如何解决此问题?
有什么好主意吗?
- 在包含atlbase.h之前先包含afxwin.h吗?根据support.microsoft.com/kb/173974/en-us的说明,MFC包含的内容应早于atl。
-
@halex,如果这样做,我会收到一个奇怪的错误,我找不到在这里提到的解决方案:stackoverflow.com/questions/21720864 / ...
尝试使用某些Facade接口隐藏提到的库,这些库在同一编译单元中不可见。
- 感谢您的答复Bogdan。您能再详细一点吗?
-
@ user3289501:我将创建两个接口,比如说Lib1和Lib2,并在其实现中隐藏有问题的标头的使用。假设afxwin.h为您提供了方法foo(),因此您可以在其中添加使用原始foo()的方法Lib1 :: foo()。一般而言,任何使用有问题的库的操作都可以通过这种方式隐藏。
-
非常感谢Bogdan!
-
@Bogdan您能否给出更实际的解释?我不完全明白你的意思。
-
@ k4rlsson假设您要使用atlstr.h中的CString :: Trim。假设您由于标题冲突而无法就地使用它。因此,我建议使用函数声明TrimString(char *)制作标头trim_string.h,并在trim_string.cpp内创建一个使用CString的TrimString定义。这样,您可以使用外观将CString和atlstr.h从其余的代码中隐藏起来。
在Visual Studio 2010中构建Win32应用时遇到了相同的问题。一个对我有用的解决方案是:
打开stdafx.h
将#include <windows.h>替换为#include