Link to home
Start Free TrialLog in
Avatar of Chizl
ChizlFlag for United States of America

asked on

fatal error C1189: #error : WINDOWS.H already included.

First of all, I've never used MFC.   I'm mainly an ATL developer so dont kill me for this question..

I'm needing to talk to a web server via XML from an ATL service that uses MFC and the service is calling:
CInternetSession, CHttpConnection, and CHttpFile, which I've never used..   I'm a Winsock type of guy..

The service is having some compiling issues and after looking these functions up I found the project didnt have #include "afxinet.h" and so when I add them I get a fatal error C1189: #error :  WINDOWS.H already included.

How do I get around this error??

Here is the code it's using..

      CInternetSession session("temp", 1);
      CHttpConnection* pConn = NULL;
      CHttpFile* pFile = NULL;

      char szBuff[10000];
      DWORD dwRet;
      CString csWk;

      CString csURL = "domain.com";
      CString csContext = "/dir/path";

      try
      {
            INTERNET_PORT nPort = 443;

            pConn = session.GetHttpConnection(csURL, INTERNET_FLAG_DONT_CACHE, nPort);
            pFile = pConn->OpenRequest(CHttpConnection::HTTP_VERB_POST, csContext, NULL, 1, NULL, NULL, INTERNET_FLAG_SECURE);

            CString csXML = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>......";
            int nLen = csXML.GetLength();
            CString csRet = "";

            pFile->SendRequest(NULL, 0, ((void*)(LPCSTR)csXML), nLen);
            pFile->QueryInfoStatusCode(dwRet);

            if (dwRet == HTTP_STATUS_OK)
            {
                  UINT nRead;

                  while (true)
                  {
                        nRead = pFile->Read(szBuff, 4095);
                        if (nRead <= 0)
                              break;

                        szBuff[nRead] = 0;
                        csRet += szBuff;
                  }
            }
      }
      catch (CInternetException* pEx)
      {
            //. . .
            pEx->Delete();
      }

      return 1;
Avatar of rajeev_devin
rajeev_devin

First you compile by not including the header file
#include "afxinet.h"
Actually somehow the include file "windows.h" is included again
Where did you add exactly this include line?
Avatar of Chizl

ASKER

Rajeev, it will not compile and I get like 46 errors and yea, somehow.....
First error being:
H:\Code\C++\MyApp\MyClass.cpp(71) : error C2065: 'CInternetSession' : undeclared identifier


AlexFM,
I put #include "afxinet.h" at the top of my cpp.

// MyClass.cpp: implementation of the CMyClass class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyClass.h"
#include "afxinet.h"
...
..
Goto
#include "stdafx.h"
and check whether you have an entry of
#include <windows.h>

If it is there then simply remove it.
ASKER CERTIFIED SOLUTION
Avatar of itsmeandnobodyelse
itsmeandnobodyelse
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
FYI:  MFC is optimized to use Precompiled Headers (PCH) via stdafx.h. That means that in a MFC project any cpp file (which is not excluded from PCH) needs to include "stdafx.h" prior to any other include file. There is one cpp file in project - normally stdafx.cpp - which creates the PCH. When compiling cpp files different from stdafx.cpp the compiler ignores any definition, statement or include above the include of "stdafx.h" and takes the PCH instead, what normally speeds up compilation time cause stdafx includes whole WINAPI and MFC.

The problem you run into is that afx.h the main header of MFC checks whether it was included prior to any other (Windows or MFC) header. That is to prevent user to put include statements above the include of stdafx.h where these includes would be ignored in case of PCH.

The way out is either to include additional header files below stdafx.h or to include these headers in stdafx.h - thus pushing them to PCH - below the incude of afx.h.

You also could turn off PCH option for the project or one/some individual cpp(s). However, the latter only helps if you still consider that afx.h must be included prior to any of the other MFC or WINAPI header files.

Regards, Alex
Avatar of Chizl

ASKER

I'm out of office today, but as soon as I get back tonight, I'll try this..
Avatar of Chizl

ASKER

itsmeandnobodyelse, you are the best!

Thanks,
Chizl