Я поддерживаю проект VS2010, в котором есть несколько COM-библиотек с перекрестными ссылками. Я пытаюсь настроить проект таким образом, чтобы его можно было собрать с произвольной рабочей станции, на которой установлен VS2010. Рабочая станция может быть как 32-разрядной, так и 64-разрядной, поэтому, если я настрою проект для «регистрации выходных данных», сборка не будет построена на 32-разрядной машине, поскольку 64-разрядная DLL не сможет быть загружена для вызова DllRegisterServer.
Вот пример: Typelib из проекта B ссылается на typelib из проекта A. Проект C будет ссылаться на проект B с помощью следующего оператора:
#import "B.tlb"
Поскольку библиотека B ссылается на A, когда B.tlb импортируется, компилятор пытается загрузить типы из A. Таким образом, если A не зарегистрирован, компиляция завершится с ошибкой:
error C4772: #import referenced a type from a missing type library ...
Я пытался открыть B.tlb с помощью приложения OleView, и он точно показывает только правильное имя файла для библиотеки A, если оно зарегистрировано с помощью regsvr32.
Итак, мой вопрос здесь такой: есть ли альтернативный способ для библиотечных ссылок правильно разрешать себя, не регистрируя TLB, просто помещая все файлы в один и тот же каталог каким-либо образом или прикрепляя какой-либо манифест? Например, переименуйте TLB для библиотеки как .tlb или что-то в этом роде.