初级问题,关于attach和detach的疑问

snowflyman 2005-07-21 02:57:37
attach 和 detach 在什么时候会考虑使用,使用他们的意义,或者说好处,或者说效果是什么?为什么要用到他们,还有attach 和 detach是否一定是成对出现。
涉世不久,还请各位不吝赐教,谢了
...全文
787 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosquit 2005-09-07
  • 打赏
  • 举报
回复
受教
loveghb 2005-07-23
  • 打赏
  • 举报
回复
attach是把一个C++对象与一个WINDOWS对象关联,直到用etach则把关联去掉。
如果attach了以后没有detach,则C++对象销毁的时候WINDOWS对象跟着一起完蛋。
attach了以后,C++对象的指针和WINDOWS对象的HWND会有一个映射关系,其作用相当于你直接用一个C++对象去Create一个WINDOWS对象,例如 CEdit edit; edit.create(...)
并且此映射是永久的,知道此对象完蛋为止。
如果用类似GetDlgItem函数也可以返回一个指针,并可以强制转换。GetDlgItem会到映射表里找。
有2种映射表,一中是永久的,一种是临时的。
直接用C++对象创建的WINDOWS对象或者是通过attach的对象的映射关系都被放到永久表中,否则就在临时表中创建映射。
所以GetDlgItem不推荐你保存返回的指针,因为你很难保证你的WINDOWS对象跟C++对象的关联是否放在永久表中。
如果映射是放在临时表中,那么在空闲时间会被自动删除。
用attcah完全是为了方便用MFC类的成员函数去操纵WINDOWS对象。
如果还对这个不明白的话,请看我的BLOG中的《由GetDlgItem函数想到的》一文

blog.csdn.net/loveghb
snowflyman 2005-07-23
  • 打赏
  • 举报
回复
恩,虽然还是比较模糊,不过还是多谢啦~
snowflyman 2005-07-22
  • 打赏
  • 举报
回复
哦,有点明白了,那使用attach和detach的优势是什么?为什么会考虑使用attach和detach,也就是说在什么样的情况下,使用它们比使用其它方法好?
wuprograme 2005-07-22
  • 打赏
  • 举报
回复
比如你要得到某一个控件的句柄,并如下使用:
CEdit edit;
edit.attach(GetDlgItem(IDC_EDIT1)->m_hWnd);这样你就可以对该控件操作了
但是你这个是局部变量的化(也就是当函数结束时该对象就会销毁)如果你不edit.detach()那么在销毁edit时就会连着把该控件也销毁,这是非法的。
当然这只是一种情况。你可以把它声明为类成员或指针,就不用自己detach()了
snowflyman 2005-07-22
  • 打赏
  • 举报
回复
能不能稍微讲的明白点,不一定是在dll里,有些应用程序里不也会用到attach和detach么
wuprograme 2005-07-22
  • 打赏
  • 举报
回复
没有什么优势(个人觉得)对于某些特定环境,这只是一种解决方法而已;不过比其他方法而言比较安全(个人意见)
milozy1983 2005-07-21
  • 打赏
  • 举报
回复
你是说dll里面的吗,你可以看下核心编程的19章。我在PlatformBuild下调试内核的时候就要用他们来看dll是否正常加载的。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧