句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。
“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。 转百度
分享到:
相关推荐
### 句柄与指针的区别 在计算机编程领域,尤其是对于Windows编程而言,理解句柄(Handle)与指针(Pointer)之间的差异至关重要。这两者虽然都用来引用内存中的资源或对象,但在实现机制和使用场景上存在显著区别。...
在VC++中,句柄和指针是两个基本概念,但它们之间的区别却很少被人所了解。本文将对句柄和指针的区别进行详细的阐述,并从多方面对它们进行比较。 首先,指针是内存的编号,通过它我们可以直接对内存进行操作,只要...
句柄的作用域通常局限于它被创建的进程内,如果需要在不同进程间传递句柄,需要使用特定的系统函数,如DuplicateHandle,来进行句柄的复制和传递。这种机制增加了句柄在跨进程通信中的复杂性,但同样也提供了额外的...
在MFC(Microsoft Foundation Classes)编程中,句柄和指针是两个非常关键的概念。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,使得开发者可以更方便地进行窗口、控件等对象的操作。...
MATLAB函数句柄是指一个指向函数的指针,它允许用户定义和操作函数,从而实现函数的调用、操作和优化。函数句柄可以被用来实现函数的调用、函数的组合、函数的优化等操作。 MATLAB函数句柄的类型 MATLAB函数句柄...
内存句柄和指针在计算机编程中都是用来访问和操作内存中的对象的工具,但它们在使用和功能上有显著的区别。在Windows编程中,这两者尤其常见。 首先,内存句柄是一个由操作系统分配的唯一标识符,用于识别特定的...
在 MATLAB 中,函数句柄和匿名函数是两种非常重要的编程工具,它们允许程序更加灵活地处理函数和数据。本文将详细解释这两种概念及其用途。 **函数句柄** 是 MATLAB 中的一种数据类型,它能捕获函数的引用,就像是...
在MFC开发中,获取句柄和指针是常见的需求之一,尤其是在处理窗口、控件以及各种类实例的情况下。本文旨在详细介绍如何在MFC中获取各种类型的句柄和指针,并提供具体的代码示例。 #### MFC中获取常见类句柄 在MFC...
SanYe库可能包含有专门的命令或函数,如“组件句柄转指针”(.HANDLE_TO_POINTER)和“指针转组件句柄”(.POINTER_TO_HANDLE),使得这些操作变得更加直观和简便。 总结来说,理解窗口组件和指针的概念,掌握它们...
虽然VB自身并不直接支持函数指针(或称函数句柄),但通过一些技巧和工作流程,开发者可以实现类似的功能。"VB调用函数指针,几近完美"这个主题就是关于如何在VB中模拟函数指针的高级技术,使得即使是初学者也能理解...
函数句柄是MATLAB中的一个重要概念,它是一种指向函数的引用,类似于函数的指针。通过函数句柄,可以在程序中动态地调用函数,这在函数回调、函数作为参数传递和延迟评估等高级编程场景中非常有用。例如,你可以创建...
`LoadCursor`返回加载成功后的鼠标指针句柄,这个句柄可以作为`SetCursor`函数的第一个参数使用。 在易语言中,调用API函数需要先声明其原型,然后使用对应的API名和参数进行调用。例如: ```easy-language .声明...
- `AfxGetMainWnd()` 是一个全局函数,用于获取应用程序的主窗口句柄,可以转换为对应的C++对象指针。 - `GetDocument()` 方法在CView类中定义,用于获取关联的文档对象指针。 - `GetActiveView()` 返回当前活动...
首先,让我们了解什么是指针和句柄。指针在C++中是一个变量,它存储了另一个变量的地址,而在MFC中,类的指针通常用来指向类的对象。句柄则是操作系统用来标识和访问系统资源的一种机制,如窗口、菜单、控件等。 **...
### MFC类之间的指针句柄转换详解 #### 一、引言 MFC(Microsoft Foundation Classes)作为Windows平台下的一个重要编程框架,被广泛应用...希望本文能为读者在MFC开发中遇到的指针句柄转换问题提供有用的指导和参考。
在MATLAB编程环境中,函数句柄(function handle)是一种数据类型,它表示可调用的函数,类似于其他编程语言中的函数指针或引用。函数句柄可以用来传递函数作为参数,或者存储函数以便稍后执行。`invFuncHandle` 是...
### MFC窗口m_hWnd和this指针 #### 一、m_hWnd **m_hWnd** 是MFC中一个非常重要的概念,特别是在处理窗口相关的编程时。它首先出现在类`CWnd`中,作为该类的第一个数据成员。根据MSDN的解释,m_hWnd是一个类型为`...
函数句柄则是MATLAB中一种引用函数的方法,它像一个指针,指向函数的内存地址,使得我们可以将函数作为参数传递,或者存储在变量中。本PPT学习教案主要介绍了MATLAB中的控制流,包括for循环、while循环、if-else-end...
在计算机科学中,"勺柄和指针"是两个与内存管理和程序设计紧密相关的概念,尤其是在C、C++等低级编程语言中至关重要。这里,我们将深入探讨这两个概念及其在计算机底层工作中的作用。 首先,"勺柄"一词通常指的是...