指针和句柄有什么区别? 句柄是标识一个窗口的,指针是指向一块内存的,我这么理解对么?那指针和句柄之间能互相赋值么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 API是接口,句柄是接口,两者有什么区别?API是一个通用的函数族,他处理所有的对象,而句柄是和某个具体对象相关联的数据结构。只有借助句柄,API才知道处理哪个对象。有些对象有ID。句柄表示特殊的对象,ID也表示某个对象,为什么要两个东西来表示?首先,句柄不能唯一表示对象。一个对象可以有多个句柄。例如:假设我们用CreateProcess创建一个进程,该进程的第一个线程的句柄会返回给调用CreateProcess的进程。同时,在新创建的进程中,该线程也会有一个句柄。这样,这个线程就有两个句柄。我们也可以用DuplicateHandle复制一个句柄,这个句柄和原来句柄是不一样的,但是他们都表示同一个对象。而每个有ID的对象,在系统范围内,ID肯定是唯一的。其次,句柄所能实现的功能ID不能实现。毕竟ID只是一个数字,他不能记录很多信息。而句柄可能在其内部结构中记录了很多信息(如权限、有无信号等)。总之,如果试图解释他到底是什么,学习句柄就会误入歧途。从虚的角度去理解,对于新手是难一点,但是这也许是唯一正确的办法。 以前的好帖,转你看看句柄与指针评论(1)发表时间:2006年2月15日 12时11分 [%repeat_0 match="/data/option"%] [%=@title%] [%=@count%]票 [[%=@percent%]%] [%_repeat_0%] csdn上有人说过:牧童遥指杏花村。牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.句柄就是烤叉,用烤炉烤过鸭,鸡,牛,羊,狗么?炉子里的东西是看不见,摸不到的,但你能用叉子去控制,至于叉子上的是什么,你放进去前应该记住。呵呵句柄有时是指针,有时是索引,但他绝对是一把钥匙,内核句柄110的钥匙,GDI句柄是您的钥匙,只对您有效。 单从概念上讲,句柄指一个对象的标识,而指针是一个对象的首地址。从实际处理的角度讲,即可以把句柄定义为指针,又可以把它定义为同类对象数组的索引,这两种处理方法都有优缺点,至于选用哪种方式,完全应该看实际需要,这可以说是一种程序设计上的技巧。那种单纯认为句柄是指针或索引的想法都是机械的、不确切的。 其实,在Windows中类似的处理是很多的、很灵活的。再具个相似的例子: 我们知道,在Windows中有个函数叫做CallWindowProc。故名思义,它的作用就是向指定的窗口过程传递一个消息。你也许会想,既然我已经有了窗口过程的指针,为什么我不可以直接通过这个指针调用该函数(这是C语言的内建功能)?事实上,在Win16中确实可以这么做,因为GetWindowLong返回的确实是该函数的指针。但在Win32下,GetWindowLong返回的并不是该函数的指针,而是一个包含函数指针的数据结构的指针(MSDN上说返回的是一个窗口函数地址或它的句柄,就是指的这种情况)。该数据结构是可变的,但只要你使用CallWindowProc来调用的话是不会出错的。这里我们又看到使用句柄处理带来的好处。(补充说明一点:微软在这里之所以这么处理,是为了解决16位/32位以及ANSI/UNICODE的转化问题) 句柄的英文意思是handle,直译可译为把手,你可以用句柄来获得对一个对象的使用,窗口句柄只是其中的一个,还有打印机句柄,内存区块句柄.句柄是把各种对象抽象为一个句柄变量,从而可以通过操纵句柄来操纵对象.一般来说句柄实际是指向struct结构的指针.我不知道你是不是学习了C语言,但如果你对指针还不是很清楚的话,还是应该先看看C语言的书,不用着急学windows编程 往往句柄是对数据指针的一个包装然后通过索引表的形式引用到实际数据里面可以参考袁峰老大的<windows图形编程><windows核心编程>里面的有关章节 句柄的意义其实只是标识对象的ID,一个ID绝对可以用整形变量或指针什么等保存,所以是可以相互赋值的。 VS2005 中 用GridCtrl 控件问题? 运行时报错? CDateTimeCtrl 函数中引入了一个vector变量,怎么返回一个指针?在main中怎么定义一个指针接受它呢? WebBrowser控件从流中加载页面 哪位高手知道用vc打印图片文件 小妹学VC求vc6.0的视频教程 GUID_NULL在哪里定义的? vc++嵌入汇编程序的问题 openGL画运动小球的轨迹问题 关于WM_MOUSEMOVE,请指教 如何在两个工程之间调用函数 请问如何调试ASP组件?
评论(1)发表时间:2006年2月15日 12时11分
[%repeat_0 match="/data/option"%] [%=@title%] [%=@count%]票 [[%=@percent%]%]
[%_repeat_0%]
csdn上有人说过:牧童遥指杏花村。
牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.句柄就是烤叉,用烤炉烤过鸭,鸡,牛,羊,狗么?
炉子里的东西是看不见,摸不到的,但你能用叉子去控制,
至于叉子上的是什么,你放进去前应该记住。呵呵句柄有时是指针,有时是索引,但他绝对是一把钥匙,内核句柄110的钥匙,GDI句柄是
您的钥匙,只对您有效。 单从概念上讲,句柄指一个对象的标识,而指针是一个对象的首地址。从实际处理
的角度讲,即可以把句柄定义为指针,又可以把它定义为同类对象数组的索引,这两种
处理方法都有优缺点,至于选用哪种方式,完全应该看实际需要,这可以说是一种程序
设计上的技巧。那种单纯认为句柄是指针或索引的想法都是机械的、不确切的。
其实,在Windows中类似的处理是很多的、很灵活的。再具个相似的例子:
我们知道,在Windows中有个函数叫做CallWindowProc。故名思义,它的作用就是向
指定的窗口过程传递一个消息。你也许会想,既然我已经有了窗口过程的指针,为什么
我不可以直接通过这个指针调用该函数(这是C语言的内建功能)?事实上,在Win16中
确实可以这么做,因为GetWindowLong返回的确实是该函数的指针。但在Win32下,GetW
indowLong返回的并不是该函数的指针,而是一个包含函数指针的数据结构的指针(MSD
N上说返回的是一个窗口函数地址或它的句柄,就是指的这种情况)。该数据结构是可变
的,但只要你使用CallWindowProc来调用的话是不会出错的。这里我们又看到使用句柄
处理带来的好处。(补充说明一点:微软在这里之所以这么处理,是为了解决16位/32位
以及ANSI/UNICODE的转化问题)
我不知道你是不是学习了C语言,但如果你对指针还不是很清楚的话,还是应该先看看C语言的书,不用着急学windows编程
然后通过索引表的形式引用到实际数据里面
可以参考袁峰老大的<windows图形编程><windows核心编程>里面的有关章节