先日からやっているコードの解析部分を単体テスト用に分割していると,
--------------------構成: 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/