这个问题问得很多,你找找旧贴
先贴一个旧贴给你看看VB的话说,句柄就是FORM在进程中的一个标号。每次运行都会不一样。
在VC里也应该也差不多。
回复人:lhxx(2000-12-18 16:41:00) 得0分
简单说是一个数值,用来描述对象什么的
回复人:Elkel(2000-12-18 16:43:00) 得0分
句柄实际上是void *,用来作为系统内唯一的id,可以标记窗口、文件、内存块等
回复人:sxbyl(2000-12-18 17:51:00) 得0分
你可以认为句柄就是一个ID
To:Elkel 句柄一般不是指针
回复人:jimconrad(2000-12-18 18:46:00) 得0分
旧贴:搜索-->“句柄”
回复人:explore(2000-12-18 19:32:00) 得0分
形象地说,你想控制它,就要先抓住它的把柄
回复人:yhspring(2000-12-18 19:41:00) 得0分
句柄的作用类似指针,但它并非指针。它付与对象一个标shi。标是一块内存,利用它可以操作这块内存,在mfc中常常需要将句柄与指针转换。
回复人:yhspring(2000-12-18 19:48:00) 得0分 句柄在winnt.h中是这么定义的:#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif STRICT修饰符的意思是变量类型是否要求严格定义。在这里,我们可以看到HANDLE其实就是一个void类型的指针。这样有什么用呢?学过c/c++语言的人都知道,void类型的指针可以通过强制类型转换变为任何类型的指针,使用最灵活。 在很多情况下,句柄是一个对象的指针,或者说是地址,一个对象的地址。比如对于分配的一个内存块(对象),它的句柄就是它的首地址,这没什么问题。 但是这并不总是成立的,对于没有对象意义的句柄尤其如此。这就取决与系统的定义了。比如系统钩子的类型HHOOK,说它是地址就没有任何意义。对于窗口句柄也是如此。在这些情况下,我们可以把句柄理解为某事物在系统该类事物列表中的ID。 是不是加点分呀?我从来没回答过50分以下的题目。:)贴上这段贴子,参考一下。
回复人:yaoliuba(2000-12-19 11:15:00) 得0分
谢谢!
回复人:sxbyl(2000-12-19 11:31:00) 得0分
按我的理解,句柄不一定仅限于HANDLE,象HWND之类
不过看了大家的回答,看来我以前的看法是错的,应该说大多数句柄都是指针
回复人:xqf(2000-12-19 14:57:00) 得0分
句柄类似于指针,但不等同于指针!如果等同于指针那还#define干吗呀!那还叫什么“句柄”呢?这点就象ID。不过实质是一样的,都代表一段内存区的首址,这是绝对的!但作用可能不同,这点就象yhspring先生说的那样。
回复人:jadedrip(2000-12-19 20:24:00) 得0分
句柄的概念很想指针,但句柄不是指针,不指向地址,它指向的东东是通过操作系统提供的函数来操作的,不能 自己乱用。
回复人:yaoliuba(2000-12-20 12:23:00) 得0分
对Win32应用程序编程接口的封装
用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
这或许是一方面吧!----------yaoliuba
回复人:chimpyu(2000-12-20 15:42:00) 得0分
句柄在WINDOWS中用于标识系统资源,例如窗口、位图,在程序中我们可以用变量名来区别他,但对于WINDOWS来说,他只不过是一个整数,用于加以区别
回复人:wao(2000-12-20 16:53:00) 得0分
句柄是什么?呵呵,句柄什么都不是,只是句柄而已。其实要说句柄是什么还得从windows3.0谈起。在windows3.0的实模式中,大家共用内存,为了提高内存使用率,windows必须能够移动内存,可是实模式下,没有现在这种虚存,就是硬件指针影射的功能,所以microsoft就发明了句柄。windows内部保留一个句柄和实际地址的影射表,这样你在使用内存前就必须lock住句柄,windows就返回一个指针。所以你看win32 api,其中好多lock打头的api就是那个时代的遗迹。现在句柄可以说是一个古迹了,简单的指向实际了内存块了。不过microsoft可是保留权力改变句柄的内容。也许将来分布编程模式下,又会恢复句柄的原始涵义。
回复人:plt560zj(2000-12-20 17:03:00) 得0分
句柄远不止是一个指针。windows程序认为资源,如窗口、图标、光标等都有一个句柄。在屏幕后有一个句柄表,跟踪资源的地址和资源类型的信息。之所以称为句柄是因为程序使用它作为得到一个资源的方法。句柄的典型用法是传递到需要使用资源的函数,和从分配资源的函数中返回。
不管所使用的是哪种句柄,都要记住它是调用资源、并可使用资源的一种方法。
先贴一个旧贴给你看看VB的话说,句柄就是FORM在进程中的一个标号。每次运行都会不一样。
在VC里也应该也差不多。
回复人:lhxx(2000-12-18 16:41:00) 得0分
简单说是一个数值,用来描述对象什么的
回复人:Elkel(2000-12-18 16:43:00) 得0分
句柄实际上是void *,用来作为系统内唯一的id,可以标记窗口、文件、内存块等
回复人:sxbyl(2000-12-18 17:51:00) 得0分
你可以认为句柄就是一个ID
To:Elkel 句柄一般不是指针
回复人:jimconrad(2000-12-18 18:46:00) 得0分
旧贴:搜索-->“句柄”
回复人:explore(2000-12-18 19:32:00) 得0分
形象地说,你想控制它,就要先抓住它的把柄
回复人:yhspring(2000-12-18 19:41:00) 得0分
句柄的作用类似指针,但它并非指针。它付与对象一个标shi。标是一块内存,利用它可以操作这块内存,在mfc中常常需要将句柄与指针转换。
回复人:yhspring(2000-12-18 19:48:00) 得0分 句柄在winnt.h中是这么定义的:#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif STRICT修饰符的意思是变量类型是否要求严格定义。在这里,我们可以看到HANDLE其实就是一个void类型的指针。这样有什么用呢?学过c/c++语言的人都知道,void类型的指针可以通过强制类型转换变为任何类型的指针,使用最灵活。 在很多情况下,句柄是一个对象的指针,或者说是地址,一个对象的地址。比如对于分配的一个内存块(对象),它的句柄就是它的首地址,这没什么问题。 但是这并不总是成立的,对于没有对象意义的句柄尤其如此。这就取决与系统的定义了。比如系统钩子的类型HHOOK,说它是地址就没有任何意义。对于窗口句柄也是如此。在这些情况下,我们可以把句柄理解为某事物在系统该类事物列表中的ID。 是不是加点分呀?我从来没回答过50分以下的题目。:)贴上这段贴子,参考一下。
回复人:yaoliuba(2000-12-19 11:15:00) 得0分
谢谢!
回复人:sxbyl(2000-12-19 11:31:00) 得0分
按我的理解,句柄不一定仅限于HANDLE,象HWND之类
不过看了大家的回答,看来我以前的看法是错的,应该说大多数句柄都是指针
回复人:xqf(2000-12-19 14:57:00) 得0分
句柄类似于指针,但不等同于指针!如果等同于指针那还#define干吗呀!那还叫什么“句柄”呢?这点就象ID。不过实质是一样的,都代表一段内存区的首址,这是绝对的!但作用可能不同,这点就象yhspring先生说的那样。
回复人:jadedrip(2000-12-19 20:24:00) 得0分
句柄的概念很想指针,但句柄不是指针,不指向地址,它指向的东东是通过操作系统提供的函数来操作的,不能 自己乱用。
回复人:yaoliuba(2000-12-20 12:23:00) 得0分
对Win32应用程序编程接口的封装
用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
这或许是一方面吧!----------yaoliuba
回复人:chimpyu(2000-12-20 15:42:00) 得0分
句柄在WINDOWS中用于标识系统资源,例如窗口、位图,在程序中我们可以用变量名来区别他,但对于WINDOWS来说,他只不过是一个整数,用于加以区别
回复人:wao(2000-12-20 16:53:00) 得0分
句柄是什么?呵呵,句柄什么都不是,只是句柄而已。其实要说句柄是什么还得从windows3.0谈起。在windows3.0的实模式中,大家共用内存,为了提高内存使用率,windows必须能够移动内存,可是实模式下,没有现在这种虚存,就是硬件指针影射的功能,所以microsoft就发明了句柄。windows内部保留一个句柄和实际地址的影射表,这样你在使用内存前就必须lock住句柄,windows就返回一个指针。所以你看win32 api,其中好多lock打头的api就是那个时代的遗迹。现在句柄可以说是一个古迹了,简单的指向实际了内存块了。不过microsoft可是保留权力改变句柄的内容。也许将来分布编程模式下,又会恢复句柄的原始涵义。
回复人:plt560zj(2000-12-20 17:03:00) 得0分
句柄远不止是一个指针。windows程序认为资源,如窗口、图标、光标等都有一个句柄。在屏幕后有一个句柄表,跟踪资源的地址和资源类型的信息。之所以称为句柄是因为程序使用它作为得到一个资源的方法。句柄的典型用法是传递到需要使用资源的函数,和从分配资源的函数中返回。
不管所使用的是哪种句柄,都要记住它是调用资源、并可使用资源的一种方法。
解决方案 »
- 关于QueueUserAPC的问题
- ******************新手问题,请对我写的程序提供建议(最好直接指出代码的那个地方不好)********************
- 如何截获并显示窗口DC(在线等)
- 线程UINT的问题(在线等)
- Include的顺序问题请教
- 用过这个例子的兄弟们请帮个忙~~~关于LISTCTRL
- 作了一个基于dialog的app,如何退出呢?
- 请教:在新建一个类向导中,对没有在基类列表中出现的类要派生其子类, 该怎么处理合适,比如CDatabase类,没有在基类列表中呀! 谢谢各位!
- WSAWaitForMultipleEvents为什么不等待具体事件发生?
- 新人求助.如何写软件改变WINDOWS桌面
- 怎样得到我的运行程序所在的目录?
- 如何在一个程序里面同时显示中文和日文?
资源ID只是系统用来管理的一个定义,一个标识数字而已。
指针你应该知道吧
至于Handle, 其实是一个指向指针的指针。