c ++简单条件记录

时间:2010-03-18 14:26:50

标签: c++ file logging conditional

免责声明:我不是c ++开发人员,我只能做基本的事情。 (我理解指针,只是我的知识太生疏了,我已经有20年没碰到c / c ++ :))

设置:我有一个Outlook插件,用C#/。Net 1.1编写。它使用c++ shim加载。

通常情况下,这非常有效,我在我的c#代码nlog中用于记录目的。但有时候,插件无法加载,即使是它根本没有命中托管代码,因为我无法从日志文件中调查问题。

所以,我需要将一些基本的日志记录挂钩到c ++ shim中 - 只需写入文件即可。我需要让用户尽可能简单地启用它。实际上我不想默认发货。

我正在考虑一些事情,它将检查是否存在特定的dll(日志记录dll),如果存在,则使用它。否则,它将不会记录任何内容。这样,当我有一个有这样问题的用户时,我只能向他发送日志记录dll,用户将它保存在运行时目录中,我将拥有该文件。

我想这必须通过某种形式的工厂解决方案来完成,该解决方案返回一个虚拟记录器,或者如果找到了dll,则返回真实的记录器。

另一种选择是制作一些简单的记录器,并根据指令重建垫片或不使用它。这不是理想的方法,因为垫片需要签名,我必须指示用户制作“真实”的备份副本,然后在完成后恢复等,而不是仅保存和删除dll

我很感激任何有关如何处理它的好建议,以及链接或示例代码如何进行此操作。

干杯

2 个答案:

答案 0 :(得分:2)

加载日志dll的接缝就像处理配置问题的复杂方法一样。为什么不使用注册表。如果你在dll上使用条件加载,你将使用LoadLibraryGetProceAddress,正如你所说的那样,你不是真正的c ++编码器,所以为什么要引入复杂性。还有必须有n + 1个c ++日志库,你可以查看其中任何一个。


我在谷歌搜索后发现了一些

答案 1 :(得分:1)

为什么没有注册表项?用户打开regedit,添加密钥,您的库开始记录。日志记录代码将一直存在,只有在密钥不存在或未设置为“无记录”时才会调用。