2013-04-11 59 views
1

在我的混合解決方案(C++ /。NET)中,我想將Log4Net的ILog實例傳遞給C++對象(以統一日誌記錄)。C++/CLI:如何在本機類中存儲託管引用?

我想寫一個C++接口(LogInterface),然後在C++/CLI項目中實現託管到非託管的適配器,但問題是非託管的適配器將無法存儲字段指向到託管的ILog實例。

有沒有一種優雅,安全和執行的方式來實現這一點(除了在靜態緩存中存儲託管引用)?

class UnmanagedLogAdapter : 
    public LogInterface 
{ 
    public: 
     UnmanagedLogAdapter(log4net::ILog^ log); 

     virtual bool IsInfoEnabled(void) const override 
     { 
      return m_log->IsInfoEnabled(); 
     } 

     virtual void Info(const std::wstring& message) override 
     { 
      log4net::ILog^ log = m_log; // alternative that I want to avoid: log = StaticCache::Find(m_logId); 
      log->Info(gcnew System::String(message.cstr())); 
     } 

    private: 
     log4net::ILog^ m_log; //TODO: a managed field is forbidden 
}; 

回答

8

使用gcroot<ILog^>成員,如here所述。

相關問題