Это распространенная проблема, которую необходимо решить при работе с файлами IDL. Хорошо, что есть несколько способов решить эту проблему:
- Использование параметров компилятора MIDL для изменения сгенерированного вывода
- Слой вашего компонента, чтобы конфликтующие файлы компилировались по разным путям. Вы также можете контролировать, как сгенерированные файлы публикуются. Затем код, который должен включать его, может контролировать, откуда включаются файлы.
Ваше окончательное решение может использовать немного # 1 и # 2.
Компилятор MIDL имеет несколько опций для изменения имен выходных файлов или исключая выходные файлы.
Прямое указание имен:
-OUTPUT FILE NAMES-
/cstub filename Specify client stub file name
/dlldata filename Specify dlldata file name
/h filename Specify header file name
/header filename Specify header file name
/iid filename Specify interface UUID file name
/proxy filename Specify proxy file name
/sstub filename Specify server stub file name
/tlb filename Specify type library file name
Пропуск выходных файлов:
-OUTPUT FILE GENERATION-
/client none Do not generate client files
/server none Generate no server files
/notlb Don't generate the tlb file
Лично я использовал опцию / prefix, чтобы избежать коллизий заголовков в прошлом.
/no_default_epv Do not generate a default entry-point vector
/prefix client str Add "str" prefix to client-side entry points
/prefix server str Add "str" prefix to server-side manager routines
/prefix switch str Add "str" prefix to switch routine prototypes
/prefix all str Add "str" prefix to all routines
Вот пример этого:
/prefix client HIDE_
Интерфейс с методом foo будет переименован в HIDE_foo в заголовке.
Другая стратегия, которая работает, связана с тем, как вы наслоите свои каталоги, упорядочите их, и опубликуете файлы, и используете пути включения, и упорядочите фактические включения. Я привык использовать источники только с файлами dir и build.exe, поэтому не могу дать совет, как это работает с VS.