【发布时间】:2011-09-05 20:23:10
【问题描述】:
因为我需要使用 MSXML 格式化“漂亮”的 XML,所以我使用 trick referenced here 为我的代码添加缩进。因为我只想保存一个文件,所以我使用SHCreateStreamOnFile() 打开一个IStream。文件被保存,我可以在文本编辑器中打开它,XML 内容就在那里。然后我在IStream 接口上调用Release(),这样IStream 和文件句柄就会关闭。
我还是这么说,但是 Process Explorer 告诉我,一旦我的保存功能退出(尽管已发布),我的进程仍然引用我的文件。我尝试第二次调用Release(),但仍然没有结果,句柄没有关闭。 Google 和 MSDN 能告诉我的只是我应该调用 Release... 但不清楚 Release() 是否只释放 COM 对象或文件句柄。
那么,有没有一种特殊的方法可以强制关闭SHCreateStreamOnFile() 创建的文件句柄?还是有更好的方法来获取文件上的IStream?我需要按特定顺序拨打IMXWriter、ISAXXMLReader 和IStream 上的Release() 吗?
提前谢谢你。
【问题讨论】:
-
你在用
IStream做什么?您必须将它传递给可以保留一段时间的东西.... -
检查这个social.msdn.microsoft.com/Forums/en/vcmfcatl/thread/… - 与您的问题有关 - 使用智能指针,而不是释放额外的阅读器对象
-
嗯,我没有使用 CComPtr 类,但我确实使用了自定义类。我会检查一下。此外, SHCreateStreamOnFile() 使用“out”参数,而不是您提到的博客文章中的返回值。而且我确实尝试过两次释放指针...