C++中HANDLE句柄的概念

93 篇文章 20 订阅
78 篇文章 5 订阅

HANDLE:句柄,是WINDOWS用来表示对象的,是一个通用句柄表示。
在WINDOWS程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时为他们分配内存,并返回标示这些资源的标示号,即句柄。
但是如果这些资源的位置变了呢?
HANDLE是固定的,不会变,但是对象的地址会变,当对象在内存中的位置发生改变后,我们不能通过之前的对象指针找到对象。HANDLE能用来记录对象的最新地址。
也就是说,HANDLE像是中间商,联络着WINDOWS API和看不见的对象,所以可以通过HANDLE让对象做事。(不能让我们知道对象的内存地址是因为操作系统怕受到不利操作)。

各种HANDLE的定义,如HDC,HPEN,HINSTANCE等等,你会发现有这样一个声明:

DECLARE_HANDLE(HDC);

再把DECLARE_HANDLE这个宏展开:

#define DECLARE_HANDLE(name) struct name##__ { int unused; }; 
typedef struct name##__ *name


用HDC替换上面的name:

struct HDC__

{

int unused;

};

typedef struct HDC__ *HDC

所以句柄就是一个指向某一结构的指针,这个结构体只有一个成员,它是一个整数。
HANDLE的定义,在winnt.h头文件中:

typedef PVOID HANDEL;

PVOID是什么?

typedef void *PVOID;

HANDLE不过是一个指向void型,即无类型的指针,嗯,目前的指针是32位的吧.其实也不能说HANDLE是一种指针,它只充当一种索引的作用。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值