Я программирую с помощью следующих инструментов / версий: Windows 10 / VS2017 Professional / C ++
После обновления до 15.5.1 я получил следующую ошибку:
MIDL2338: переключатели противоречивы — no_robust vs. — target
В списке описания ошибок компилятора Microsoft сказано: Вы не можете использовать оба параметра командной строки / osf и / ms_ext при компиляции файла IDL.
Ни один из этих переключателей не указан в свойствах моего проекта.
Я попытался вернуться к 15.4.1, но обнаружил, что невозможно вернуться к старой версии, если это не N-1. Это основано на многих блогах, которые я прочитал (включая переполнение стека).
Я врезался в стену и нахожусь в тупике, пока не выясню эту проблему с переключателем.
Ваша помощь будет принята с благодарностью.
Я столкнулся с той же проблемой только сейчас, но, к счастью, у меня есть доступ к другой, более старой установке.
Вот командная строка под 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"
Так что все, что изменилось, это то, что новый параметр / цель «NT60» был добавлен, предположительно, в качестве нового значения по умолчанию.
Мне кажется, что есть два пути решения этой проблемы:
«Параметр командной строки / no_robust должен использоваться для отключения функции / robust, если сгенерированные заглушки должны работать в Microsoft Windows NT, Windows 95/98 или Windows Me».
Любое изменение работает для меня с точки зрения избавления от ошибки, но первый метод имеет наименьшее влияние.
PS. Я думаю, что описание ошибки MS (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366756%28v=vs.85%29.aspx?f=255&MSPPError = -2147217396) скорее всего будет неправильным в этом случае. Исходное сообщение об ошибке, которое вы видите, ссылается на два конкретных флага, / no_robust а также / цель, не для / OSF а также / ms_ext.
Для того, чтобы удалить /no_robust
флаг (если сгенерированные заглушки не нужно запускать в Microsoft Windows NT, Windows 95/98 или Windows Me), просто удалите
<ValidateAllParameters>false</ValidateAllParameters>
записи под <Midl>
элемент в .vcxproj
файлы.
Источник: ссылка