在我的混合解决方案( C++ /.NET)中,我希望将Log4Net的ILog实例传递给C++对象(以统一整个解决方案中的日志记录)。
我想编写一个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
};发布于 2013-04-11 10:20:03
如here所述,使用gcroot<ILog^>成员。
https://stackoverflow.com/questions/15939620
复制相似问题