У меня есть устаревшее решение Visual Studio, которое содержит несколько проектов (было обновлено до Visual Studio 2013). Один из этих проектов генерирует COM DLL. TLB из этой DLL затем импортируется в файл IDL другого проекта через атрибут importlib. Когда компилятор MIDL пытается скомпилировать файл IDL зависимого проекта, он генерирует следующее предупреждение:
предупреждение MIDL2015: не удалось загрузить tlb в importlib
Когда я использую полный путь к файлу TLB, он работает.
Я попытался добавить путь к свойству MIDL -> Additional Include Directories, но я думаю, что это только для файлов IDL, заголовка и ACF (/ Я переключаю).
Я также попробовал свойство Linker -> Additional Library Directories, но это тоже не сработало.
Какой путь поиска использует MIDL при разрешении атрибутов importlib?
Это не интуитивно понятно, midl.exe не имеет параметра командной строки для указания каталогов для поиска. Обратите внимание, что у midl.exe никогда не возникает проблем с importlib («stdole2.tlb»), файлом, который хранится в каталоге c: \ windows \ system32.
Project + Properties, каталоги VC ++, добавляют путь, в котором хранится .tlb, к Executable Directories
установка. После того, как вы закончите и добавите, скажем, «c: \ temp», он должен выглядеть как «c: \ temp; $ (ExecutablePath)».
Не уверен, что выигрывает много призов. Создание или сохранение .tlb по более предсказуемому пути, чтобы вы могли использовать относительный путь в вашей директиве importlib, вызывает меньше неожиданностей через год.