在dll中初始化记录器

时间:2012-10-13 19:24:53

标签: c++ dll g2log

我正在尝试使用VS2012在我的DLL项目中使用g2log日志库。

问题在于查看文档LINK,它需要在开始时进行初始化,并在程序的生命周期内保持活力。 由于我没有主,并且使用DllMain没有帮助,我在哪里可以进行初始化? (我最近开始这个项目所以我也接受有关日志库的其他选项的建议)

2 个答案:

答案 0 :(得分:4)

当您使用VS2012时,您可以使用C ++ 11,这意味着您可以使用线程安全静态,以便添加全局函数:

Logger& get_logger ()
{
   static Logger logger;
   return logger;
}

然后使用get_logg()来获取对象(如果你需要更复杂的构造/初始化,你也可以在这个函数中使用来自C ++ 11的std :: atomic<>)。这是一个使用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库,所以我不能给出更明确的例子。

答案 1 :(得分:1)

我打算做一些事情similar。在某个地方,你正在使用那个DLL。在您的用户代码中,您可以调用初始化过程,您也可以在其中配置g2log。