• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > Activex控件在IE中使用,内存泄漏问题已经何时销毁对象。

Activex控件在IE中使用,内存泄漏问题已经何时销毁对象。

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了ie activex控件设置,ie activex控件下载,ie已阻止activex控件,ie阻止activex控件,ie允许activex控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: Activex控件在IE中使用,内存泄漏问题已经何时销毁对象。
描述:

MFC开发Activex控件,在IE中调用。当IE关闭时,内存泄漏。
已经重载 Onclose函数
请问如果Activex需要给IE使用,该注意什么?以上问题怎么解决。


解决方案1:

大多数ActiveX控件框架,例如MFC和ATL,在本地激活ActiveX控件时创建控件。基于性能上的考虑,直到控件第一次可见的时候,IE才本地激活ActiveX控件。这样包含ActiveX控件的网页载入更加迅速,占用内存更少。这也使得ActiveX控件的WM_CREATE处理代码直到控件第一次可见的时候才被调用。
如果控件支持非窗口激活,那么IE会以非窗口激活方式创建控件,这样在离开或者关闭页面的时候控件的WM_DESTORY处理代码不会被调用。
解决方案
IE在初始化或者退出页面的时候会调用页面中的ActiveX控件的IOleObject::SetClientSite的实现,无论控件是否被本地激活。在初始化页面的时候,传递的指针是宿主的IOleClientSite 接口指针,在离开或者关闭页面的时候,传递的指针是空指针。可以根据这个指针来判断控件的状态,并且执行初始化或者清除的代码。
MFC
MFC对IOleObject::SetClientSite()的实现包含对虚函数COleControl::OnSetClientSite()的调用。这时候可以根据m_pClientSite是否为空指针来判断控件是被加载还是被清除。
// CMyControl 派生于COleControl.
void CMyControl::OnSetClientSite()
{
    if (m_pClientSite) 
//父窗口及其大小并不重要,因为控件在本地激活时会自动重画和重新定位。
       VERIFY (CreateControlWindow (::GetDesktopWindow(), CRect(0,0,0,0), CRect(0,0,0,0)));
    else
        DestroyWindow(); 
    COleControl::OnSetClientSite();
}
ATL
ATL对IOleObject::SetClientSite()的实现有一个IOleClientSite类型的参数(MFC在对IOleObject::SetClientSite()的实现中保存这个指针到COleControl::m_pClientSite),直接拿来判断就行了。同时,ATL没有重新设置控件的父窗口,所以控件需要手动进行本地激活。
// CMyControl 派生于CComControl 
STDMETHOD(SetClientSite)(IOleClientSite *pClientSite)
{
    if (pClientSite)
    {
        RECT rc = {0,0,0,0}; 
        // Don't have access to the container's window so just use the
        // desktop. Window will be resized correctly during in-place 
        // activation.
        HWND hWnd = CreateControlWindow(::GetDesktopWindow(), rc);
        _ASSERT (hWnd); 
    }
    else
        ::DestroyWindow(m_hWnd);
     return IOleObjectImpl::SetClientSite (pClientSite);
}
HRESULT InPlaceActivate(LONG iVerb, const RECT* prcPosRect) 
{
     // Get the container's window. _ASSERT (m_spClientSite);
     LPOLEINPLACESITE pInPlaceSite = NULL;
     HRESULT hr = m_spClientSite->QueryInterface(IID_IOleInPlaceSite, (void **)&pInPlaceSite); 
     _ASSERT (SUCCEEDED (hr) && pInPlaceSite); 
     HWND hParent = NULL; 
     hr = pInPlaceSite->GetWindow (&hParent);
     _ASSERT (SUCCEEDED (hr) && hParent); 
     pInPlaceSite->Release ();
     // Set container window as our parent window
     SetParent (hParent);  < BR >      return CComControlBase::InPlaceActivate(iVerb, prcPosRect);  < BR > }
Refresh控件的宿主HTML文档会被销毁,控件窗口不能继续存在,但是你可以手动添加引用计数来防止控件对象被删除。控件可以在此时保存状态。

解决方案2:

记住释放new的东东!在代码中找你有几个new和delete.

解决方案3:

指针没有释放,检查你的内存分配的地方,析构时要全部释放掉


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • activex添加的属性在ie中为何传递不成功
  • 怎么用ActiveX开发IE插件
  • 使用微软提供的将word嵌入ie的activeX控件在保存时出错
  • =====>急问,ActiveX在IE下载过程是走的tcp什么端口?是80吗?
  • IE中嵌入控件的问题,关于FromIDispatch,超郁闷,帮帮我吧。
  • ActiveX控件在IE里能避免informationbar出现么?
  • 能不能将一个ie的dll插件转换成activeX组件做到自动下载并注册
  • 在IE中嵌入控件,退出IE时错误,wincorecpp,line365,不明白,请指点
  • ActiveX控件在IE中无法显示???
  • 设置Activex控件的显示大小

相关文章

  • 2017-06-05 hookapilineto
  • 2017-06-04 COM的VARIANT类型参数传送二进制数据的问题!
  • 2017-06-04 VC调用word,GetFormFields问题
  • 2017-06-04 初学COM,征集方案:你会怎么设计下面的组件和接口?
  • 2017-06-04 Vista下ContextMenu右键菜单扩展失效
  • 2017-06-04 写word文件
  • 2017-06-05 如何把c++的定义的类对象做为参数传递。谢谢
  • 2017-06-05 JS如何回调ActiveX
  • 2017-06-04 大侠,高人给点提示吧。关于控件CLSID的
  • 2017-06-04 请问一将ActiveX控件插入测试容器,就能显示出图形像OnDraw的椭圆,而不是运行容器之后才显示出来?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 有熟悉script控件的吗?
    • delphi调用C++的DLL问题,急!(送500分)
    • 请教高手shell问题
    • 命名空间扩展复制粘贴问题(高手来)
    • ACTIVEXint类型,数组类型接口,急啊
    • #import语句一般都是制定了一个绝对路径,这样编译的结果,有通用性么?
    • Dll:为什么VC开发的Dll函数参数char在VB中不能调用再问?
    • 请教高手:能否通过AfxBeingThread传入的handle参数直接访问主线程成员?
    • 请介绍一下关于IRequest接口的方法(在ASP页面里用的)
    • asp调用的com组件可以创建进程吗?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有