2011-07-10 41 views
-2

起初我的英语不好。如何解决BSTR泄漏内存COM对象?

我正在使用Microsoft ISA Server 2006 C++编程SDK。

我从isa服务器获取isa服务器的信息,需要BSTR变量,但它使内存泄漏,并且使用::sysFreeString(BSTR)它不能解决内存泄漏问题。 我该怎么做?

FPCLib::IFPCLogEntryPtr::get_ClientIP(BSTR *); 
+1

建议你发布(削减)代码 –

+0

你用SysAllocString分配它吗? –

+1

@sam:您应该发布您的代码以帮助我们,但无论如何,请查看http://msdn.microsoft.com/en-us/library/xda6xzx7(v=vs.71).aspx, Hth :) –

回答

1

默认情况下,COM BSTR值由运行时库,这不能不让泄漏的外观随着时间的推移缓存。即使你自己的代码没有泄漏,堆的大小仍然会增长 - 非常烦人。

如果你想排除这个原因,你可以使用SetOaNoCache API来禁用。

如果在完成此操作后仍然存在明显泄漏,则可以使用Process Dumper来追踪它,以获取连续的快照,然后再次运行以进行比较。如果可能的话,针对您的Debug版本运行此操作,因为在这种情况下,调用堆栈更容易解密。

+0

SetOaNoCache API。在Windows Server 2003上不起作用 – sam

+0

您是否尝试了Process Dumper? –