句柄 C++
研究了半天,没研究出句柄究竟是怎么个东东,只知道是个标识符,具体怎么用啊,哪个大哥能给个例子琢磨一下,越简单越好,只要使用句柄了就行,谢谢。再有,别再说什么回去查MSDN...
研究了半天,没研究出句柄究竟是怎么个东东,只知道是个标识符,具体怎么用啊,哪个大哥能给个例子琢磨一下,越简单越好,只要使用句柄了就行,谢谢。
再有,别再说什么回去查MSDN了,没明白才问的。
补充一句,也是重复一句,具体怎么用啊,哪个大哥能给个例子琢磨一下,越简单越好,只要使用句柄了就行,谢谢。 展开
再有,别再说什么回去查MSDN了,没明白才问的。
补充一句,也是重复一句,具体怎么用啊,哪个大哥能给个例子琢磨一下,越简单越好,只要使用句柄了就行,谢谢。 展开
4个回答
展开全部
你说对了,就是个标识符,是系统起的编号。窗口句柄就是操作系统给窗口编的号,文件句柄就是操作系统给文件编的号。你要调用函数操作窗口,你就告诉系统这个编号,系统就知道你想要操作哪个窗口了。就跟监狱长说,句柄123456的砍头,211314的打板子,那么编号123456的犯人就脑袋不保,编号211314的屁股就会开花,以此类推。
怎么用?一般来说就是个整数,如果函数要求句柄作为参数就把它作为参数,只有这一种用法吧。比如win32 api函数BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng);用来设置一个窗口的标题,你得告诉它是哪个窗口,第一个参数就是那个窗口的句柄。你调用的时候把句柄传过去就行了。
要是你在补充一句,这个句柄我怎么得到的?CreateWindow函数创建窗口的时候,操作系统会为新建的窗口分配一个系统内唯一的整数做句柄,然后返回给你。
不要因为这个操作系统自动分配的整数编号被英文翻译过来成了名词“句柄”,就觉得很复杂。其实它除了是个编号外啥也不是,不用太琢磨。就好像你成年了,等于创建了个新的成年人,社会就会自动(不用管如何,所以说自动)分配给你一个身份证号,以后移动公司(就好像程序员)要调用你这个人,给你登记手机号,就要引用你的身份证号,这是社会(系统)内部唯一的,你的窗口标题(你的名字)还可能有重复的呢。
唉打了这么多字,感觉自己真闲。就当是饭后运动了。
怎么用?一般来说就是个整数,如果函数要求句柄作为参数就把它作为参数,只有这一种用法吧。比如win32 api函数BOOL SetWindowText(HWND hwnd,LPCTSTR lpStrjng);用来设置一个窗口的标题,你得告诉它是哪个窗口,第一个参数就是那个窗口的句柄。你调用的时候把句柄传过去就行了。
要是你在补充一句,这个句柄我怎么得到的?CreateWindow函数创建窗口的时候,操作系统会为新建的窗口分配一个系统内唯一的整数做句柄,然后返回给你。
不要因为这个操作系统自动分配的整数编号被英文翻译过来成了名词“句柄”,就觉得很复杂。其实它除了是个编号外啥也不是,不用太琢磨。就好像你成年了,等于创建了个新的成年人,社会就会自动(不用管如何,所以说自动)分配给你一个身份证号,以后移动公司(就好像程序员)要调用你这个人,给你登记手机号,就要引用你的身份证号,这是社会(系统)内部唯一的,你的窗口标题(你的名字)还可能有重复的呢。
唉打了这么多字,感觉自己真闲。就当是饭后运动了。
展开全部
句柄不是C++的,而是Windows提供的。
句柄针对Windows中的某些对象(包括哪些后面有),出于安全性等考虑,Windows并不提供这些对象的物理地址,而是提供一个标识该对象的唯一整数!
————在Windows环境中,句柄标识的项目包括:
*.模块(module)
*.任务(task)
*.实例(instance)
*.文件(file)
*.内存块(block of memory)
*.菜单(menu)
*.控制(control)
*.字体(font)
*.资源(resource):包括图标(icon),光标(cursor),字符串(string)等
*.GDI对象(GDI object):包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。
——————注意:
内核对象句柄,是用来标识某个内核对象的一个id
同一个对象的该id对于每个进程是不同的,具体如何实现是ms不公开的算法,以下是一个近似的,可能的算法:
1-进程创建时,windows系统为进程构造了一个句柄表
2-当该进程希望获得一个内核对象句柄或者创建一个内核对象从而获得该对象句柄时,系统会在句柄表中增加一个表项,表项的内容中存储了指向目标内核对象的指针
3-同时,系统返回这个表项在句柄表中的索引作为句柄
详情可参考:http://baike.baidu.com/view/194921.htm
句柄针对Windows中的某些对象(包括哪些后面有),出于安全性等考虑,Windows并不提供这些对象的物理地址,而是提供一个标识该对象的唯一整数!
————在Windows环境中,句柄标识的项目包括:
*.模块(module)
*.任务(task)
*.实例(instance)
*.文件(file)
*.内存块(block of memory)
*.菜单(menu)
*.控制(control)
*.字体(font)
*.资源(resource):包括图标(icon),光标(cursor),字符串(string)等
*.GDI对象(GDI object):包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。
——————注意:
内核对象句柄,是用来标识某个内核对象的一个id
同一个对象的该id对于每个进程是不同的,具体如何实现是ms不公开的算法,以下是一个近似的,可能的算法:
1-进程创建时,windows系统为进程构造了一个句柄表
2-当该进程希望获得一个内核对象句柄或者创建一个内核对象从而获得该对象句柄时,系统会在句柄表中增加一个表项,表项的内容中存储了指向目标内核对象的指针
3-同时,系统返回这个表项在句柄表中的索引作为句柄
详情可参考:http://baike.baidu.com/view/194921.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,如果要说到句柄,不得不提到内核对象,内核对象(进程,线程,互斥锁,信号量,窗口,文件等)。内核对象由操作系统就行托管(呵呵,又是一个名词),程序只能通过句柄来引用内核对象,来申请和使用系统资源。
初学者可以认为是指针,因为句柄是一个操作系统概念(如果要再说不得不说到进程句柄表,PEB,TEB等。。)呵呵!
最简单的就是WIN32 API 中HANDLE类型的都是句柄。多多努力,不懂得可以MM我。。
初学者可以认为是指针,因为句柄是一个操作系统概念(如果要再说不得不说到进程句柄表,PEB,TEB等。。)呵呵!
最简单的就是WIN32 API 中HANDLE类型的都是句柄。多多努力,不懂得可以MM我。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
句柄实际就是个指针,是windows中某个对象的指针,比如win32应用中,最长见的窗口句柄(HWND),实例句柄(HINSTANCE),MFC中的某个控件的句柄。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询