先日からやっているコードの解析部分を単体テスト用に分割していると,
--------------------構成: prs_frml - Win32 Debug-------------------- コンパイル中... prs_frml.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 の実行エラー prs_frml.exe - エラー 1、警告 0
「パッと見」でわかる時は良いが,今回はわかり難い.
そんな時に私が場所を限定していく手順.
次の様に影響していそうな所に #pragma message (” ~ “) を追加.
#pragma message ("pass 1") #include "StrAryTo.hxx" #pragma message ("pass 2") #ifdef _MSC_VER #ifdef _AFXDLL #else #ifndef afxDump #define afxDump std::terr #endif #endif #endif #pragma message ("pass 3")
今回は次の様になったので StrAyTo.hxx が原因とわかった.
pass 1 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>
StrAryTo.hxx は CStringArray と std::vector<tstring> を相互変換するコード.
インクルードから外すことで対応.
MFC を使用しているソースなどの対応方法は次の所.
https://dev.mish.work/wordpress/2019/04/05/c1189-windows-h-already-included/