我使用以下工具/版本进行编程:Windows 10 / VS2017 Professional / C ++
升级到15.5.1后,我收到以下错误:
MIDL2338:开关是矛盾的 - no_robust vs. - target
Microsoft编译器错误说明列表说:编译IDL文件时,不能同时使用/ osf和/ ms_ext命令行开关。
我的项目属性中没有指定这些开关。
我试图降级回15.4.1,但发现除非是N-1,否则无法恢复旧版本。这是基于我读过的很多博客(包括Stack Overflow)。
我找到了一堵墙并处于停滞状态,直到我找到了这个开关问题。
非常感谢您的帮助。
答案 0 :(得分:8)
我刚才遇到了同样的问题,但幸运的是我可以访问另一个较旧的安装。
这是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"
以下是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"
所有改变的是,添加了一个新参数 / target“NT60”,可能是一个新的默认值。
我认为有两种方法可以解决这个问题:
“如果生成的存根需要在Microsoft Windows NT,Windows 95/98或Windows Me上运行,则必须使用/ no_robust命令行开关来禁用/ robust功能。”
在消除错误方面,任何一项改变都适用于我,但第一种方法影响最小。
PS。我认为在这种情况下MS错误描述(https://msdn.microsoft.com/en-us/library/windows/desktop/aa366756%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)可能不正确。您看到的原始错误消息是指两个特定的标志, / no_robust 和 / target ,而不是 / osf 和 / ms_ext
答案 1 :(得分:0)
要删除/no_robust
标记(如果生成的存根不需要在Microsoft Windows NT,Windows 95/98或Windows Me上运行),只需删除
<ValidateAllParameters>false</ValidateAllParameters>
<Midl>
个文件中.vcxproj
元素下的条目。
来源:ref