Как правильно связать проект DLL с другим проектом в том же решении C ++ в Visual Studio? - PullRequest
0 голосов
/ 29 марта 2020

У меня есть решение с двумя проектами C ++:

  • Проект A: Сборка DLL
  • Проект B: Исполняемый проект, который использует DLL из проекта A.

Как правильно сделать dll из проекта A доступным для проекта B? Сейчас я делаю следующее:

  • Установите порядок сборки как Проект A -> Проект B
  • Добавьте источник проекта A в список включаемых каталогов проекта B.
  • Добавьте событие предварительной сборки в Project B, чтобы скопировать dll в выходной каталог Project B.

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

Кроме того, что мне делать с Файл lib, который генерируется вместе с dll при создании проекта A?

Кстати, я использую Visual Studio 2017.

1 Ответ

0 голосов
/ 29 марта 2020

Если DLL будет использоваться только текущим решением, метод «Добавить ссылку» в порядке, выходные каталоги всех проектов уже должны быть одинаковыми (вероятно, $ (SolutionDir) \ $ (Platform) \ $ (Конфигурация)), хотя промежуточные каталоги будут отличаться (вероятно, $ (Платформа) \ $ (Конфигурация)), поэтому копирование не потребуется. Метод «Добавить ссылку» заставляет зависимый проект вводить .lib без дополнительной работы с вашей стороны.

Если DLL будет использоваться в нескольких решениях, я предлагаю изменить стандарт __declspe * 1010 Блок * (dllexport | dllimport) для включения директивы #pragma comment (lib, ...):

#if defined(MYLIB_EXPORTS)
#define MYLIB_API __declspec(dllexport)
#else
#define MYLIB_API __declspec(dllimport)
#pragma comment(lib, '"mylib.lib")
#endif

Таким образом, простое включение заголовка библиотеки приведет к тому, что компоновщик внесет необходимый файл .lib. У меня есть структура каталогов, подобная следующей:

<root>
\projects
\projects\shared
\projects\shared\bin
\projects\shared\bin64
\projects\shared\include
\projects\shared\lib
\projects\shared\lib64

и сценарии, которые я запускаю под WSL, который принимает выходные данные VS и копирует файлы в соответствующие каталоги. Таким образом, любые проекты, которые я создаю и которые предназначены для будущего использования, не требуют, чтобы я добавлял пути к проектам c к путям поиска компилятора, мне просто нужно изменить глобальные таблицы свойств, чтобы в нужный момент заглянуть в \ project \ shared (и окружение windows включает \ project \ shared \ bin64; \ project \ shared \ bin)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...