I have a .NET library for which I'm writing a C++/CLI wrapper to expose the public members to native world. One of the requirement is to make use of CComBSTR for strings and avoid the std namespace altogether.
For this purpose, I included the atlbase.h header file to use CComBSTR. Everything worked fine as far as the wrapper or its unit tests were concerned. But when I tried using the wrapper headers and libs in an existing project, I noticed a high number of compilation errors all originating from files that don't directly belong to the project I'm compiling. I'm posting a few of them below:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(560): error C2039: 'vt' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(561): error C2039: 'vt' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(932): error C2039: 'vt' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(933): error C2039: 'bstrVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(935): error C2039: 'bstrVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1798): error C2039: 'cVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1798): error C2065: 'cVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1808): error C2039: 'bVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1808): error C2065: 'bVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1818): error C2039: 'pcVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1818): error C2065: 'pcVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1828): error C2039: 'pbVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1828): error C2065: 'pbVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1838): error C2039: 'iVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1838): error C2065: 'iVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1848): error C2039: 'piVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1848): error C2065: 'piVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1858): error C2039: 'uiVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1858): error C2065: 'uiVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1869): error C2039: 'puiVal' : is not a member of 'tagVARIANT'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\oaidl.h(455) : see declaration of 'tagVARIANT'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1869): error C2065: 'puiVal' : undeclared identifier
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlcomcli.h(1880): error C2039: 'intVal' : is not a member of 'tagVARIANT'
I tried a couple of suggestions like the one in https://answers.unrealengine.com/questions/56125/problems-with-including-atlbase-in-ue4-onlyproblem.html but it didn't help. I would prefer not having to make any changes to application project but instead do something in the wrapper project itself that resolves these compilation errors.