2012-10-13 68 views
2

我正在尝试使用VS2012在我的DLL项目中使用g2log记录库。初始化dll内部的记录器

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

回答

4

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

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

,然后使用该get_logg()来获取对象的保留(如果你需要更复杂的建筑/初始化你也可以做,这个函数内部使用std ::原子<>从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库,所以我不能给更明确的例子。

+0

这比这复杂一点,但是,一个好的开始。我会按照你的建议工作,谢谢。 –

1

我打算做点什么similar。某处,你正在使用该DLL。在您的用户代码中,您可以调用初始化过程,您也可以在其中配置g2log。

+0

是的,我只希望找到一种方式,使它对图书馆的项目是透明的。在DLL我基本上只出口静态工厂,也许我可以使用它。 –

+0

如果你把g2log分成一个dll,那么你可以在那里做:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx –

+0

我看,将记录器放在一个单独的库中对于在整个解决方案中使用不同的项目也是有用的,但我没有想到这一点! –