Я новичок в C++, и мне нелегко получить ссылки на мои dll. Я пытался заставить его работать на пару дней, но некоторые объяснения, которые я нашел, часто ссылаются на выполнение x или y, но не говорите мне , как делать x или y. Поскольку я не ветеран C++, мне нужен кто-то, чтобы пройти через меня. То, что я хочу сделать, это следующее:Как настроить многопроектное решение на C++?
MySolution
MyExe (Win32 .exe)
Main.h
Main.cpp
(constructs ImplementationB calls the methods as defined by InterfaceA, then deletes the instances)
(calls/fills HelperC.Foobar)
MyInterfaces (dll)
InterfaceA.h
~InterfaceA();
virtual void DoSomething();
MyUtils (dll)
HelperC.h
static float Foobar;
HelperD.cpp
float HelperC::Foobar = 1.0f;
MyImplementations (dll)
ImplementationB : InterfaceA
(uses the value from HelperC.Foobar)
В MyExe
и MyImplementations
проекты содержат большую часть исполняемого кода. Но мне нужен интерфейс, поэтому мне нужен проект интерфейса (MyInterfaces
). Мне нужны вспомогательные классы, которые должны быть доступны как из MyExe
, так и MyImplementations
, следовательно MyUtils
. Я хотел бы, чтобы этот вспомогательный класс был статически доступен, хотя он не является обязательным.
У меня была компиляционная версия, прежде чем я начал добавлять MyUtils
с классом HelperC
. Мне пришлось пометить интерфейс деструктора __declspec(dllexport)
, а также метод DoSomething
. Я также должен был пометить конструктор ImplementationB
, чтобы создать экземпляр с MyExe
, что имеет смысл. Однако, когда я попытался пометить весь класс (как реализацию, так и интерфейс) с помощью __declspec(dllexport)
, пример не будет компилироваться (что делает не смысл).
Из того, что я читал, наличие статических полей в dll и использование их из внешнего кода на самом деле не очень хорошо работает. Таким образом, в качестве альтернативы я сделал Foobar
нестатическим и передал экземпляр HelperC
в метод, как описано в InterfaceA
. Поскольку я уже получил простые классы для работы, я подумал, что это тоже должно работать. Однако теперь компилятор бросает ошибки на конструкторе ImplementationB
(LNK2019).
Вкратце: я получаю ошибки ссылок повсюду в разделах, которые не имеют ничего общего с моими изменениями, и есть небольшая документация, описывающая конкретные шаги, которые необходимо выполнить, чтобы получить простую ссылку на dll для работы ,
Может кто-то указать, что мне нужно добавить, и где мне нужно добавить его, чтобы он скомпилировался? Кроме того, некоторые из них делают и не говорят о ссылках на C++ dll, которые очень помогли бы (например, не использовать статику в проектах).
Это больше похоже на вопрос * Microsoft Visual Studio *, чем на вопрос * C++ *. – user3553031
Извините, вы частично верны. Существует аспект Visual Studio, но большая его часть относится к синтаксису C++. Добавление ссылки в VS не так уж сложно, но проблема с ссылкой на работу (т. Е. Выставлять код) является проблемой. – Beijerinc
Обычно вы используете макрос, который вычисляет '__declspec (dllexport)' при построении DLL и '__declspec (dllimport)' при использовании dll. – drescherjm