2014-12-22 3 views
4

У меня вопрос. Возможно ли, чтобы проекты ссылались друг на друга при одном и том же решении?Microsoft Visual Studio 2012 C++ Циркулярная ссылка

Например, оба проекта A и B имеют свои собственные экспортированные функции. Проект A ссылается на ссылки на проекты B и Project B Project A. Оба проекта необходимы для доступа к экспортируемым функциям друг от друга.

Технически, было бы возможно?

+0

Вы имеете в виду только код или решение? т.е. зависимости проекта? Если последнее, то нет, вы заметите, что вы не можете вводить зависимость проекта через последний метод. Из меню проекта – EdChum

+0

Не внутри VisualStudio нет, но вы можете на уровне импорта, хотя это несколько сложно и обычно намного больше усилий, чем того стоит. Например, вы можете фактически экспортировать функции из EXE, с которыми DLL может ссылаться при загрузке. Это дает вашему непосредственному доступу DLL к функциям в EXE без большой настройки и ручной инициализации. Посмотрите на создание .DEF-файлов и создание библиотек импорта (LIB). Не уверен, что это то, что вы ищете. –

+0

Я просто пробовал это, и зависящий от проекта проект был вычеркнут, когда вы попробуете это, всплывающее диалоговое окно сообщает вам: «Эта зависимость не может быть добавлена, потому что она создаст циклическую зависимость» – EdChum

ответ

1

Технически, это возможно, но у него есть проблемы.

Когда вы строите 2 библиотеки DLL, DLL требует Lib файл B, B требует Lib файл А.

Here're, как мы это делаем: Первый проект А не зависит от В, только B зависит от A. Экспорт двух функций funcA1 и funcA2, в то время как мы можем построить DLL A, тогда мы сможем построить B и сгенерировать B.lib. Поскольку у нас есть файл B.lib, тогда мы можем позволить A зависеть от B и добавить код для использования экспортированных функций из B. Именно так мы создали Circular Reference в моем проекте реальной жизни.

Проблема в том, что при очистке всех файлов lib и восстановлении вы не можете. Я не поклонник этого, вместо создания круговой ссылки, мы должны поместить связанные функции в другую DLL.

+0

Фактически один из способов - создать третий проект (Project C), который использует команды пользовательской сборки для создания библиотеки импорта из файла DEF. Затем вы делаете Project A и Project B зависимыми от Project C. Затем библиотеки импорта создаются раньше в нужное время. –

+0

@Matt: Спасибо за объяснение. При выполнении перестроения я предвижу проблемы с циркулярными ссылками. Они этого не допустят. Я беру предложение включить связанные функции в другую DLL (Project C) с проектами A и B, ссылающимися на C вместо. – Wallace

1

Насколько я понимаю, это невозможно. Если два проекта A и B относятся друг к другу, они будут одним и тем же проектом - неясно, какой проект сделает эту структуру необходимой.

Смежные вопросы