C++HANDLE的理解

    技术2022-07-10  140

    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是一种指针,它只充当一种索引的作用。

    Processed: 0.011, SQL: 9