2014-07-15 13 views
1

У меня есть устаревшее решение Visual Studio, которое содержит несколько проектов (было обновлено до Visual Studio 2013). Один из этих проектов генерирует COM-DLL. TLB из этой DLL затем импортируется в файл IDL другого проекта через атрибут importlib. Когда компилятор MIDL пытается скомпилировать файл IDL зависимого проекта она генерирует следующее предупреждение:Предупреждение MIDL2015 при использовании атрибута importlib

предупреждение MIDL2015: не удалось загрузить TLB в importlib

Когда я использую полный путь к TLB файл работает.

Я пробовал добавить путь к свойству MIDL -> Дополнительное включение каталогов, но я думаю, что это только для файлов IDL, заголовков и ACF (/I switch).

Я также попробовал Linker -> Свойства дополнительных библиотек, но это тоже не сработало.

Какой путь поиска используется MIDL при разрешении атрибутов importlib?

+0

Думаю, вы должны использовать относительный путь к другому проекту - вы строите их один за другим, не так ли? – sharptooth

+0

За исключением того, что они идут в каталоги на основе конфигурации сборки. Думаю, я мог бы обойти это с #ifdefs (если это работает с компилятором MIDL). Я не мог разработать способ добавления суффикса в файл TLB (например, D для отладки) без нарушения RC-файла. – Steiny

ответ

3

Неинтуитивно, midl.exe не имеет опции командной строки, чтобы указать каталоги для поиска. Обратите внимание, что у midl.exe никогда не возникает проблемы с importlib ("stdole2.tlb"), файл, который хранится в c: \ windows \ system32.

Project + Properties, VC++ Directories, добавьте путь, где .tlb сохранен в настройке Executable Directories. После того, как вы закончите, и вы добавили, скажем, «c: \ temp», он должен выглядеть как «c: \ temp; $ (ExecutablePath)».

Не так уверен, что выигрывает много призов. Имея .tlb, сгенерированный или сохраненный в более предсказуемом пути, чтобы вы могли использовать относительный путь в своей директиве importlib, вы получаете меньше сюрпризов для головок через год.

+0

Должен был прочитать это пару раз, но я понимаю, что вы сейчас имеете в виду, спасибо. Это намного лучше, чем все, что я мог придумать. Я искал попытку заменить importlib импортом с IDL-файлом. На самом деле я не был уверен, что я делаю, хотя тбх. Все еще пытаюсь узнать, что означает все это и как его использовать. – Steiny