У меня следующая ситуация:Обмен данных от статического Lib между динамическим LIBS
- Статическая библиотека с классом А; (Регистратор)
- Основного приложения, которое создает класса А экземпляра, как синглтон
- Различных задержек загружены динамические библиотеки (плагины), которая связывает с (1.) и необходимо использовать экземпляр класса А.
Как я должен разделить синглтон от основного приложения (2.) между плагинами (3.)? Есть ли какие-либо возможности в Qt/C++ для этого?
В настоящее время я использую уродливое решение на основе разделяемой памяти, и я не думаю, что это правильно.
Я думаю о рефакторинге с использованием шаблона инъекции зависимостей, но он налагает некоторые ограничения.
SAMPLE:
Статическая библиотека "log.lib":
struct Log
{
void write(QString text);
};
Основное применение "app.exe":
Log *logger = new Log; // I need only one logger for all application
int main()
{
logger->write("Main");
...
}
Plugin 1 "plg1.dll"
extern Log *logger; // Logger from "app.exe"
void Foo()
{
logger->write("Foo");
}
Плагин 2 "plg2.dll"
extern Log *logger; // Logger from "app.exe"
void Bar()
{
logger->write("Bar");
}
Непонятно, что вы просите, пожалуйста, вставьте код. Если я правильно понял, о чем я не уверен, вы можете создать экземпляр синглтона из своей библиотеки, возможно, через интерфейс плагина, но то, что вы пишете ... мне остается неясным, так же как это связано к использованию библиотеки статически. – lpapp
Да, вы понимаете правильно. Но я не хочу создавать экземпляр * библиотечного интерфейса * logger * throught, потому что существует множество сложных взаимосвязей между библиотеками (Shared/Static/Delay loaded/mixed cases). –