Инициализировать регистратор внутри DLL

Я пытаюсь использовать библиотеку журналов g2log внутри моего проекта DLL с использованием VS2012.

Проблема в том, что глядя на документацию ССЫЛКА НА САЙТ」Он должен быть инициализирован в начале и сохраняться в течение всего срока действия программы.
Так как у меня нет main, и использование DllMain не помогает, где я могу выполнить инициализацию?
(Я начал этот проект недавно, поэтому я также принимаю предложения о других опциях для библиотеки журналов)

2

Решение

Поскольку вы используете 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, поэтому не могу привести более явные примеры.

4

Другие решения

Я планирую что-то делать аналогичный. Где-то вы используете эту DLL. В своем коде пользователя вы можете вызвать процедуру инициализации, где вы также можете настроить g2log.

1

По вопросам рекламы [email protected]