描述:
程序基于IE的ATL ActiveX Control,功能是禁止IE的打印,打屏等。
问题是多次Refresh,IE会出错;而且每次Refresh,任务管理器中IE占用的内存都会增加.
.....
IE请求到下面这个页面:
<HTML><BODY />
<OBJECT classid="clsid:29E3C745-E3B1-4D45-ACE1-793F4E684DD3"
ID=Myobj width="100%" height="100%" align="top"
CODEBASE="http://192.168.1.118/vpp.cab#Version=1,0,0,7">
</OBJECT>
</BODY></HTML>
页面中的对象显示正确,但是当我快速刷新的时候,会出现下面的异常:
First-chance exception in IEXPLORE.EXE (MSHTML.DLL): 0xC0000005: Access Violation.
出现这个错误只会在快速refresh时才有(至于第几次refresh则是完全不确定的,有时刷新5,6次就会出错).
我review了代码,IInternetProtocol的几个method(比如IInternetProtocol::UnlockRequest,IInternetProtocol::Read,IInternetProtocolRoot::Terminate )我都正确重载并认为代码没有错....
另外每次刷新IE内存占用都会增加,但是我在重载的COM对象的FinalRelease()函数中都已调用了IWebBrowser2的Release().....
谁能救我????
解决方案1:
我猜是你的控件有内存或资源泄漏!!!
你的ATL COM是不是调用了很多HTML Dom的操作,
一定要做的干净,比如Addref,Release,否则多次刷新后就有问题.