Hi,
I'm implementing a OpcUa Server app based on the Unified_Automation OPCUA UaSdkCppBundleSource.
I have to integrate the UaSdkCppBundle into a MFC (VisualStudio 2015) app.
I get a compiler error:
1>c:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error: WINDOWS.H already included. MFC apps must not #include <windows.h>
The include hierarhy looks like this:
1> Note: including file: p:\opcuaserver\source\suddatamanager\suddatamanager.h
1> Note: including file: P:\OpcUaServer\Source\OpcUaServer\stdafx.h
1> Note: including file: p:\opcuaserver\source\opcuaserver\targetver.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afxwin.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h
1> Note: including file: C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\new.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\crtdefs.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afxver_.h
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afxv_w32.h
1>c:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afxv_w32.h(16): fatal error C1189: #error: WINDOWS.H already included. MFC apps must not #include <windows.h>
1> datachangesimulator.cpp
So if I understand correctly:
MFC apps must not #include <windows.h>
Opcua includes header files which require windows.h.
How to resolve this?
Thanks,
Regards,
Sandor
OpcUa Server in MFC app
Moderator: uasdkcpp
-
- Jr. Member
- Posts: 1
- Joined: 04 Sep 2017, 14:18
Re: OpcUa Server in MFC app
I had the same issue. The point is that you need to keep MFC and UA strictly seperated. I created an interface class that encapsulates the MFC part. This interface must of course not use any MFC type, e.g. use std::string, not CString.
In the non MFC part i use a forward declaration to access that interface class. This ensures no MFC headerfiles drop in which again would brake the compilation.
In the non MFC part i use a forward declaration to access that interface class. This ensures no MFC headerfiles drop in which again would brake the compilation.