首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么彻底释放ActiveX控件

2012-02-01 
如何彻底释放ActiveX控件大家好,最近我在编写浏览器控件(该控件生成Dll形式被主程序调用)时,发现通过CWnd:

如何彻底释放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;
我测试第一次会内存增加,后面不会。
[解决办法]
应该是代码有问题,仔细检查下你都在哪里申请了内存,对于看是否都释放了。

热点排行