如何彻底释放ActiveX控件
大家好,最近我在编写浏览器控件(该控件生成Dll形式被主程序调用)时,发现通过CWnd::CreateControl创建的ActiveX无法释放,即使调用了CWnd::DestroyWindow函数也没有,只有等到模块完全退出(模块执行了CXXXAPP::ExitInstance函数)以后,该控件所占的内存控件才会被释放调,但是我们的软件要求一直运行着,不能频繁启动和退出,如果放任该控件释放内存,则该软件持续运行两个月后就会自己崩溃,不知道大家有没有好的方法可以彻底的释放ActiveX控件?
[解决办法]
http://support.microsoft.com/default.aspx?scid=kb;EN-US;195188
http://blog.csdn.net/newkey007/archive/2004/07/12/39898.aspx
[解决办法]
我不是太明白你的需求,
我的理解是这样的:
你希望创建的资源在DestroyWindow的时候就要彻底释放,不能等到ExitInstance再去释放。
CWnd::CreateControl创建了控件,在窗口的析构函数,或者 OnDestroy里去释放资源应该是可以释放掉的
也许是你自己开辟的一些资源,你并未进行释放操作。
不知道我这样理解对不对
[解决办法]
CWnd* cwb = new CWnd;
CRect rect(10,10,50,50);
cwb->CreateControl(CLSID_WebBrowser,
NULL,
(WS_VISIBLE | WS_TABSTOP|WS_BORDER),
rect,
this,
AFX_IDW_PANE_FIRST);
IUnknown* m_pIUnknow = cwb->GetControlUnknown();
m_pIUnknow->Release();
cwb->DestroyWindow();
delete cwb;
我测试第一次会内存增加,后面不会。
[解决办法]
应该是代码有问题,仔细检查下你都在哪里申请了内存,对于看是否都释放了。