Я пытаюсь использовать библиотеку журналов g2log внутри моего проекта DLL с использованием VS2012.
Проблема в том, что глядя на документацию ССЫЛКА НА САЙТ」Он должен быть инициализирован в начале и сохраняться в течение всего срока действия программы.
Так как у меня нет main, и использование DllMain не помогает, где я могу выполнить инициализацию?
(Я начал этот проект недавно, поэтому я также принимаю предложения о других опциях для библиотеки журналов)
Поскольку вы используете VS2012, вы можете использовать C ++ 11, что означает, что вы можете использовать потоковую статику, чтобы вы могли добавить глобальную функцию:
Logger& get_logger ()
{
static Logger logger;
return logger;
}
А затем используйте эту get_logg (), чтобы получить объект (если вам нужна более сложная конструкция / инициализация, вы также можете сделать это внутри этой функции, используя std :: atomic<> из C ++ 11). Вот версия, использующая std :: atomic_flag:
Logger& get_logger ()
{
static std::atomic_flag is_initialized;
if (! is_initialized.test_and_set()) {
/* do lots of initialization */
}
return some_object;
}
Я не использую и не знаю библиотеку g2log, поэтому не могу привести более явные примеры.
Я планирую что-то делать аналогичный. Где-то вы используете эту DLL. В своем коде пользователя вы можете вызвать процедуру инициализации, где вы также можете настроить g2log.