2012-10-13 66 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

我看,將記錄器放在一個單獨的庫中對於在整個解決方案中使用不同的項目也是有用的,但我沒有想到這一點! –