句柄

  句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。



 

  在程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。

  句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。

 

  WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

 

  句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄

 

 

  句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

 

 

时间: 2024-07-31 19:23:33

句柄的相关文章

oracle-OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄

问题描述 OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄 OCI连接Oracle数据库的时候,建立会话连接OCISessionBegin就失败:Error code为:ORA-24314: 未初始化服务句柄.而使用PL/SQL Developer连接Oracle就可以,进去PL/SQL Developer里面也可以执行SQL语句. 解决方案 小弟是小白,刚看C++如何操作Oracle,看网博上有那么一段代码就整下来试试,没什么经验,严重被打击

关于动态生成控件和动态获得控件的句柄值

动态|控件 从问题者的发的贴子:help me里面需要动态获得控件的句柄值,这些日子在vs.net里试了一下,总结出一点点经验,如下:1.动态生成控件:不管是在asp.net里还是在windows application里,每一个控件都可以作为母控件,在其中添加一些子的控件,当然添加可以是手工添加进去,而动态添加控件一般如下:(asp.net中)         dim textbox as textbox       '动态添加一个textbox控件        textbox=new te

用句柄操纵对象

每种编程语言都有自己的数据处理方式.有些时候,程序员必须时刻留意准备处理的是什么类型.您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的指针)? 所有这些在Java里都得到了简化,任何东西都可看作对象.因此,我们可采用一种统一的语法,任何地方均可照搬不误.但要注意,尽管将一切都"看作"对象,但操纵的标识符实际是指向一个对象的"句柄"(Handle).在其他Java参考书里,还可看到有的人将其称作一个"引用",甚至一个

传递句柄

将句柄传递进入一个方法时,指向的仍然是相同的对象.一个简单的实验可以证明这一点(若执行这个程序时有麻烦,请参考第3章3.1.2小节"赋值"):   //: PassHandles.java // Passing handles around package c12; public class PassHandles { static void f(PassHandles h) { System.out.println("h inside f(): " + h); }

Effective C#原则35:选择重写函数而不是使用事件句柄

很多.Net类提供了两种不同的方法来控制一些系统的事件.那就是,要么添 加一个事件句柄:要么重写基类的虚函数.为什么要提供两个方法来完成同样的 事情呢?其实很简单,那就是因为不同的情况下要调用为的方法.在派生类的内 部,你应该总是重写虚函数.而对于你的用户,则应该限制他们只使用句柄来响 应一些不相关的对象上的事件. 例如你很了一个很不错的Windows应用程 序,它要响应鼠标点下的事件.在你的窗体类中,你可以选择重写OnMouseDown ()方法: public class MyForm :

Win7玩英雄联盟出现句柄无效怎么解决

  Win7玩英雄联盟出现句柄无效的解决方法. 步骤如下: 处理方法:此警告音是否由于安装了第三方软件后提示的,如果是建议卸载掉不要使用,或查看是不是游戏本身遇到了问题,可以卸载重新下载安装. 系统不能加载用户配置, 但能加载默认配置. "句柄无效"通常是编程的错误,但你的情况显然不可能是编程的问题,应该是丢失或更改了某些系统文件.我猜可能是你的dircetx错误,或者是丢失了某些动态连接库的DLL文件.你重新下载一个directx9.0c,安装试试.如果还不行,就重装操作系统,这样做

Win 7关联句柄轻松删除“正在使用文件”

  相信大家经常会对文件.文件夹执行删除操作,这本是一件很简单的事,但有些时候却会遇到麻烦,系统提示文件或文件夹不能删除.诸如:"文件正在使用"."操作无法完成,因为文件已在###中打开"等. 此时,如果在重启系统后,仍然因为同样的原因而无法删除需要删除的文件资源,大家也许会在网上去找一些文件删除工具来达到删除的目的.其实,如果你使用的是Win7操作系统的话,那么无须使用额外的工具即可完成被占用文件资源的删除工作,步骤如下: 先在开始菜单的搜索对话框中输入"

window操作系统下的句柄机制说明

  WORKAREA_ADDRESS(这个字段在V$SQL_WORKAREA_ACTIVE和V$SQL_WORKAREA 中都有),表示Address of the work area handle,也就是说,它是SQL工作区域这个对象的句柄(相当于是该对象在oracle系统级别上的一个标识符(identity),类似,一个人,在中国范围内,有一个唯一的区别于别人的身份证号.也类似锁是对象的中介一样.是一种表示地址的句柄)的值.Each SQL statement stored in the s

如何获得已打开目录的目录句柄?

问题描述 如何获得已打开目录的目录句柄? 我想用ReadDirectoryChangesW()来获取文件操作信息,但是其中的一个参数是监控目录的句柄,都说用createfile函数来得到目录的句柄,但是如果是已经用鼠标打开的目录,又该怎样获得其句柄呢? 解决方案 你用CreateFile()一样可以获取到对应的句柄,用共享读的方式等,用鼠标打开,不会影响

文件句柄-如何通过一个打开的文件夹句柄获得文件夹的完整路径

问题描述 如何通过一个打开的文件夹句柄获得文件夹的完整路径 我在msdn上看到了一个例子,可以从一个打开的文件句柄获取到文件名,但是 那种方法对于文件夹的句柄是没有用的,msdn示例的链接地址:http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa366789(v=vs.85).aspx 我期望能够从一个文件夹句柄得到该文件夹的完成路径,不知道谁可以帮助我! 解决方案 问题已解决,使用NtQueryObject()解决的. 解决方案二