COM DLL - 叠加图标

时间:2010-06-24 11:50:35

标签: c++ com

我创建了一个COM DLL来为文件/文件夹应用Overlay图标。

如果我打开文件夹,则会为每个文件调用IsMemberOf()函数。我可以通过在运行时根据文件状态查询数据库来确定是否为特定文件设置图标。 (我将更新db中的文件状态说修改/添加类似的东西)

似乎,查询目录中的每个文件都很昂贵且速度很慢。因此,我决定查询第一个文件(从目录中的db获取所有文件状态并存储在内存中),并使用它来处理剩余的文件列表。

为此,我想知道是否在IsMemberof函数中完全处理了所有文件。处理完所有文件后,我就可以清理内存了。如果资源管理器再次刷新,我可以再次查询db以获取文件状态。

有没有办法确定在IsMemberof函数中处理所有文件。或者还有其他方法可以做到这一点。

谢谢,

1 个答案:

答案 0 :(得分:1)

我猜你实际上是在讨论shell扩展处理程序和IShellIconOverlayIdentifier接口。

是的,将经常调用IsMemberOf方法。如果你的代码需要大量的时间来查询dbase,你必须保持它的活泼或用户在资源管理器中会遇到不良行为。不,您不能假设下一个呼叫将路径指向与前一个相同的文件夹,只是它可能会这样做。

要刷新缓存,如果您发现文件夹名称已从上一次调用更改,则可能会获得合理的行为。另一种策略是跟踪缓存项目的年龄。当缓存填满时扔掉旧的。当用户在文件夹之间来回切换时,这将有所帮助,而不是一种不常见的操作。