幾つかの,MFC を使用していないプロジェクトをビルドしていると,
--------------------構成: GAtoSTL - Win32 Release--------------------
コンパイル中...
GAtoSTL.cpp
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
cl.exe の実行エラー
GAtoSTL.obj - エラー 1、警告 0
MFC アプリでは windows.h をインクルードしてはいけないというエラー.
最近(2019/03)変更したコードで,意図せず Afx.h などを利用するようになってしまった所があると思われる.
今回の場合,デバッグ版や Linux 環境,VC 14 などでは通っている.
次の様な内容を include している部分に挿入して確認すると,
#pragma message (“message 1”)
Zip.hxx がうまくない.
#ifndef I_SUPPORT_ZIP // ここは個人的なコードです #ifdef _DEBUG #include "i_Zip.hxx" // STL と Windows.h #else #include "a_Zip.hxx" // AfxDisp などを使用 #endif #endif
a_Zip.hxx は zip を扱う古い形式(MFC を使用している)のもの.
i_Zip.hxx は MFC を使用しないように変更したもの.
a_Zip.hxx を使用しないように変更.
2019/08/26 追加
このエラーが表示される原因は,
MFC 関連の afx*.h がインクルードされる前に Windows.h が読み込まれているため.
MFC を使用しているプロジェクトで StdAfx.h を使用してない場合は,
ソース内のヘッダのインクルードで最初に #include <afxwin.h> などとすれば良い.
2020/02/14
それから,作成したヘッダファイル内では Afx*.h のインクルードはしない方が良さそう.
https://dev.mish.work/wordpress/2020/02/08/lnk2005-operator-delete/
次のエラーの場合はこちら.
error C1189: #error: Please use the /MD switch for _AFXDLL builds
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]
2020/10
コンソール AP で Windows.h を使用する時の hxx を用意した.
コンソール AP での define
_AFXDLL で判断しているため 「MFC のスタティックライブラリを使用」には対応できない .
[…] MFC を使用しているソースなどの対応方法は次の所. https://dev.mish.work/wordpress/2019/04/05/c1189-windows-h-already-included/ […]
[…] 次のエラーの場合はこちら. fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h> […]