В чем главное отличие IDL и ODL. У меня много проектов, некоторые из них имеют idl, а некоторые имеют odl. И где я должен их использовать. Каковы компромиссы.
ODL — это устаревший формат. Он был заменен на MIDL (a.k.a: IDL). Проверьте эту официальную статью Microsoft: MIDL и ODL
Язык определения интерфейса Microsoft (MIDL) теперь включает в себя
полный синтаксис языка определения объектов (ODL).
Теперь, если у вас есть файлы ODL, вы можете оставить их как есть или перенести их в IDL. Это было бы рекомендуемым решением, но оно может быть подвержено ошибкам. Это очень связано с инструментом, который вы сейчас используете для создания из него сгенерированных файлов, MIDL.exe или MkTypeLib.exe. Проверьте еще раз официальную документацию об этом: Различия между MIDL и MkTypLib
В общем, вы захотите использовать синтаксис MIDL в ваших файлах IDL.
Однако, если вам нужно скомпилировать существующий файл ODL или иным образом
поддерживать совместимость с MkTypLib, использовать / mktyplib203 MIDL
опция компилятора, чтобы заставить MIDL вести себя как Mkktyplib.exe, версия
2,03. (Это последний выпуск инструмента MkTypLib.) В частности, параметр / mktyplib203 устраняет следующие различия:
ODL является аббревиатурой от Язык описания объекта и IDL это Язык определения интерфейса.
Язык описания объекта (ODL) был оригинал интерфейс
язык определения созданный Microsoft для определения интерфейсов
использоваться в OLE Automation. Это был надмножество OMG IDL
Если вы хотите описать объект, очевидно, что ODL — лучший инструмент, то вам нужно разработать объектно-ориентированный или ориентированный на интерфейс (функциональный) объект.
Файл odl обычно анализируется с помощью Mktyplib.exe, а idl — с помощью компилятора MIDL. Но с мая 2018 года MIDL теперь включает полный синтаксис для ODL, то есть, компилятор MIDL может анализировать любой из 2 входных файлов: idl или odl.