何谓“句柄”?????????????

yaoliuba 2000-12-18 04:31:00
...全文
958 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoliuba 2000-12-20
  • 打赏
  • 举报
回复
对Win32应用程序编程接口的封装
用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
这或许是一方面吧!----------yaoliuba
plt560zj 2000-12-20
  • 打赏
  • 举报
回复
句柄远不止是一个指针。windows程序认为资源,如窗口、图标、光标等都有一个句柄。在屏幕后有一个句柄表,跟踪资源的地址和资源类型的信息。之所以称为句柄是因为程序使用它作为得到一个资源的方法。句柄的典型用法是传递到需要使用资源的函数,和从分配资源的函数中返回。
不管所使用的是哪种句柄,都要记住它是调用资源、并可使用资源的一种方法。
wao 2000-12-20
  • 打赏
  • 举报
回复
句柄是什么?呵呵,句柄什么都不是,只是句柄而已。其实要说句柄是什么还得从windows3.0谈起。在windows3.0的实模式中,大家共用内存,为了提高内存使用率,windows必须能够移动内存,可是实模式下,没有现在这种虚存,就是硬件指针影射的功能,所以microsoft就发明了句柄。windows内部保留一个句柄和实际地址的影射表,这样你在使用内存前就必须lock住句柄,windows就返回一个指针。所以你看win32 api,其中好多lock打头的api就是那个时代的遗迹。现在句柄可以说是一个古迹了,简单的指向实际了内存块了。不过microsoft可是保留权力改变句柄的内容。也许将来分布编程模式下,又会恢复句柄的原始涵义。
chimpyu 2000-12-20
  • 打赏
  • 举报
回复
句柄在WINDOWS中用于标识系统资源,例如窗口、位图,在程序中我们可以用变量名来区别他,但对于WINDOWS来说,他只不过是一个整数,用于加以区别。。。
sxbyl 2000-12-19
  • 打赏
  • 举报
回复
按我的理解,句柄不一定仅限于HANDLE,象HWND之类
不过看了大家的回答,看来我以前的看法是错的,应该说大多数句柄都是指针
yaoliuba 2000-12-19
  • 打赏
  • 举报
回复
谢谢!
jadedrip 2000-12-19
  • 打赏
  • 举报
回复
句柄的概念很想指针,但句柄不是指针,不指向地址,它指向的东东是通过操作系统提供的函数来操作的,不能 自己乱用。
xqf 2000-12-19
  • 打赏
  • 举报
回复
句柄类似于指针,但不等同于指针!如果等同于指针那还#define干吗呀!那还叫什么“句柄”呢?这点就象ID。不过实质是一样的,都代表一段内存区的首址,这是绝对的!但作用可能不同,这点就象yhspring先生说的那样。
yhspring 2000-12-18
  • 打赏
  • 举报
回复

句柄在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分以下的题目。:)



贴上这段贴子,参考一下。

yhspring 2000-12-18
  • 打赏
  • 举报
回复
句柄的作用类似指针,但它并非指针。它付与对象一个标shi。标是一块内存,利用它可以操作这块内存,在mfc中常常需要将句柄与指针转换。
explore 2000-12-18
  • 打赏
  • 举报
回复
形象地说,你想控制它,就要先抓住它的把柄
jimconrad 2000-12-18
  • 打赏
  • 举报
回复
旧贴:搜索-->“句柄”
sxbyl 2000-12-18
  • 打赏
  • 举报
回复
你可以认为句柄就是一个ID
To:Elkel 句柄一般不是指针
Elkel 2000-12-18
  • 打赏
  • 举报
回复
句柄实际上是void *,用来作为系统内唯一的id,可以标记窗口、文件、内存块等
随风bj 2000-12-18
  • 打赏
  • 举报
回复
简单说是一个数值,用来描述对象什么的
michaelpeng7799 2000-12-18
  • 打赏
  • 举报
回复
用VB的话说,句柄就是FORM在进程中的一个标号。每次运行都会不一样。
在VC里也应该也差不多。
patrickgamp3 2000-12-18
  • 打赏
  • 举报
回复
找旧帖,很详细

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧