关于句柄与指针的一个实际的问题 前辈们你们好,我是个初学MFC的学生,对于指针与句柄一直有着疑惑,比如: HGLOBAL hDib 是一个句柄, LPSTR lpdib 是一个指针句柄和指针之间有什么关系和区别么?他们应该如何转化? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 指针指向的是某个对象的地址而句柄是某个对象的标识两者之间的转换要根据具体情况看举个例子 305 号房间是一个客房 这个客房有一个门(我们假设门是客房的标识)那么305就是客房的指针 而门则是客房的标识 在比如一个Edit控件 m_Edit (对象) pEidt(指针) m_hWnd(句柄)则他们之间的联系为pEdit = &m_Edit 通过指针可以标识对象 进而表示句柄 pEdit->m_hWnd 说了这么多 不知道楼主理解否 LS的都已经说了,补充一下,MFC中很多的指针都可以获得句柄,使用指针的GetSafeHandle() 句柄是Windows系统中对象的标识,有很多种,比如窗口,资源、设备上下文等等。你说的HGLOBAL是内存块对象的标识。Windows是虚拟内存管理,一个内存块对象不见得一定在内存中,所以内存句柄不可以当指针用,你可以用GlobalLock把句柄转换成指针,调用这个函数可能会引起系统中虚实页面的交换。内存块用完了用GlobalUnlock解锁,解锁后Windows系统可以在资源紧张的情况下,把内存块的数据移出内存。 首先你要知道,句柄是系统分配给对象和资源的。所以,句柄用来唯一标示某个对象,当使用到这个对象的时候,通过句柄去句柄表中查找对象。打个比方,就像一个单词Good,你不知道什么意思,你去词典里面一查,发现是“好”这个意思。你能说Good=好 吗?句柄离开了句柄表,就什么都不是了指针是用来指向一个对象,和对象有必然的关系。人家问你,书上某一章在第几页?你说61页,那么61页也就是对应指向了这一章 前辈你好,我在很多地方见过你,不知是你太勤奋了还是我们有缘分,呵呵,那我能否这么说,比如我不知道Good什么意思,去字典目录(句柄表)里查,发现它在119(指向Good的指针)页,意味着我在119也能够找到它(Good) 用着用着就熟悉了,你就先这么记住吧。反正桌面版的windows里面,句柄就是资源的标识。 说白了,句柄就是你的名字,指针就是你家的地址。我要发消息给你,就要知道你叫什么;要找到你,就要知道你家在哪。 你理解得很好,句柄的值就等于是一种索引,可以找到对应的Object,但是并不代表它就指向了这个Object叫我前辈不敢当,我应该比你小 GetForegroundWindow的故障? 面试,被鄙视了 面试算法很重要吗?? VC6 编译成功后,会砰地一声,提示成功,能不能换个声音?? 我的可用分才300分怎么就不长了呢? 有关vc编写的ocx在网页中下载的问题 请 aben456 (风轻扬) 来领分,十分感谢!(4) 请教创建一个unsigned char *的数组和CArray的用法! 一个简单的MFC问题...... 哪位能解释一下 bitmap位图的详细存储格式? 用获取多接口CoCreateInstanceEx问题 图片显示疑惑(新手)! NDIS程序无法搜索到网卡
而句柄是某个对象的标识两者之间的转换要根据具体情况看举个例子 305 号房间是一个客房 这个客房有一个门(我们假设门是客房的标识)那么305就是客房的指针 而门则是客房的标识 在比如一个Edit控件 m_Edit (对象) pEidt(指针) m_hWnd(句柄)则他们之间的联系为pEdit = &m_Edit 通过指针可以标识对象 进而表示句柄 pEdit->m_hWnd 说了这么多 不知道楼主理解否
你说的HGLOBAL是内存块对象的标识。Windows是虚拟内存管理,一个内存块对象不见得一定在内存中,
所以内存句柄不可以当指针用,你可以用GlobalLock把句柄转换成指针,调用这个函数可能会引起系统中虚实页面的交换。内存块用完了用GlobalUnlock解锁,解锁后Windows系统可以在资源紧张的情况下,把内存块的数据移出内存。
所以,句柄用来唯一标示某个对象,当使用到这个对象的时候,通过句柄去句柄表中查找对象。打个比方,就像一个单词Good,你不知道什么意思,你去词典里面一查,发现是“好”这个意思。你能说Good=好 吗?句柄离开了句柄表,就什么都不是了指针是用来指向一个对象,和对象有必然的关系。人家问你,书上某一章在第几页?你说61页,那么61页也就是对应指向了这一章
反正桌面版的windows里面,句柄就是资源的标识。 说白了,句柄就是你的名字,指针就是你家的地址。
我要发消息给你,就要知道你叫什么;要找到你,就要知道你家在哪。