I'm programming with the following tools/versions: Windows 10 / VS2017 Professional / C++
After I upgraded to 15.5.1 I got the following error:
MIDL2338: switches are contradictory - no_robust vs. - target
The Microsoft compiler error description list says: You cannot use both the /osf and /ms_ext command-line switches when you compile an IDL file.
None of those switches are specified in my project properties.
I tried to downgrade back to 15.4.1 but have found that it's impossible to revert to an old version unless it's N-1. This is based on the many blogs I've read (including Stack Overflow).
I have hit a wall and am at a standstill until I figure out this switch issue.
Your help would be greatly appreciated.
I ran into the same problem just now, but luckily I do have access to another, older, installation.
Here is the command line under VS 2017 15.4.4:
/iid "RtdHandleServer_i.c" /env win32 /h "RtdHandleServer.h" /W1 /char signed /tlb "Win32\Release\RtdHandleServer.tlb" /Oicf /D "NDEBUG" /no_robust /nologo /proxy "RtdHandleServer_p.c"
Here is what it is changed to under VS 2017 15.5.1:
/iid "RtdHandleServer_i.c" /env win32 /h "RtdHandleServer.h" /W1 /char signed /tlb "Win32\Release\RtdHandleServer.tlb" /Oicf /target "NT60" /D "NDEBUG" /no_robust /nologo /proxy "RtdHandleServer_p.c"
So all that has changed is that a new parameter /target "NT60" has been added, presumably as a new default.
It looks to me as if there are two ways to address this:
"The /no_robust command line switch must be used to disable the /robust feature if generated stubs need to run on Microsoft Windows NT, Windows 95/98, or Windows Me."
Either change works for me in terms of getting rid of the error, but the first method has the least impact.
PS. I think that the MS error description ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa366756%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 ) is likely to be incorrect in this instance. The original error message that you are seeing refers to two specific flags, /no_robust and /target , not to /osf and /ms_ext .
Note: The MIDL compiler /robust
switch does the following ( Microsoft docs MIDL compiler: /robust switch )
Using the
/robust
switch generates additional information that allows the Network Data Representation (NDR) engine to perform run-time error checking on correlated arguments in dynamic arrays, unions, and in out interface pointers in DCOM applications. The /robust switch is only available under Windows 2000 and later versions of Windows.
In order to remove the /no_robust
flag (if generated stubs don't need to be run on Microsoft Windows NT, Windows 95/98, or Windows Me), simply remove the
<ValidateAllParameters>false</ValidateAllParameters>
entries under the <Midl>
element in the .vcxproj
files.
Source: ref
One more reference answer for MIDL2338 vs MIDL1024 errors. https://developercommunity.visualstudio.com/t/build-fails-from-from-msbuild-command-line-with-er/207580
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.