zoukankan      html  css  js  c++  java
  • 句柄

     句柄是一个序号, 它不是一个内存地址

      它用于管理Windows内核对象,比如用户打开一个文件,Windows即会建立一个文件内核对象,所谓内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。Windows系统会打开很多的文件,因此就有很多的文件内核对象,同样Windows系统还会建立其它的类型的很多很多的内核对象。如何管理这么多的内核对象 呢?Windows通过建立一个叫做句柄表的东西,用于记录内核对象的地址。表中每一个元素,都是一个内核对象的起始地址,然后给每一个对象对应一个序号,此序号即为句柄。

    1
    2
    3
    4
    5
    6
    //句柄表类似于下面的结构,像0、1、2这样的序号即为句柄
    ----------------------------------------------------
    0    第一个内核对象的地址
    1    第二个内核对象的地址
    2    第三个内核对象的地址
    ----------------------------------------------------
    比如用 HWND hwnd=::FIndWindow("xx","xxxx")得到 窗口的句柄,然后就可以进行其他操作,
    比如在显示窗口,调用 ShowWindow(hwnd, nCmdShow);
    其中hwnd就是窗口句柄。


    句柄等于记录一段内存地址的结构,比如打开一个文件,里面有大小,图标,地址不同的属性
    我用句柄表示这块内存不同对象

    有点内饰类型 比如(class a)
    假设我有快内存 用表示文件的 我用a表示这段内存的类型
    (原后我用这个内型创建不同的对象,里面有大小对象,图标对象,地址对象...对象就是句柄)
    1,我可以用a 起个对象叫做 icon 标识图标
    我可以用a 起个对象叫做 img 标识图标









    VC 中的句柄 HANDLE 其实是一个 void * 类型。像 C 语言中的 FILE 一样,它是个结构体,FILE * 其实是一个结构体地址类型。句柄在 Windows 系统中类似于指针,它就是个指针类型,但是又和指针不同。比如分配一块可移动的内存,你可以得到一个固定的句柄,但是这块内存的指针是不固定的。句柄还有其他很多种,都是通过 HANDLE 定义而来的。在 Windows 编程中,句柄代表系统中唯一一个对象,比如文件句柄、图标句柄、字体句柄、位图句柄、画刷句柄、设备环境句柄、应用程序模块句柄、进程句柄、窗口句柄等。由于 Windows 是封闭的,微软提供很多现成的函数(Windows API),句柄就是访问这类对象的一个 "指针",通过句柄才能访问这些对象。

    HANDLE 类型在 Windows SDK 头文件定义如下:
    typedef void *PVOID;
    typedef PVOID HANDLE; //文件句柄、进程句柄等
    typedef HANDLE HICON; //图标句柄
    typedef HANDLE HFONT; //字体句柄
    typedef HANDLE HBITMAP; //位图句柄
    typedef HANDLE HBRUSH; //画刷句柄
    typedef HANDLE HDC; //设备环境句柄
    typedef HANDLE HMODULE; //模块句柄
    typedef HANDLE HWND; //窗口句柄
    还有很多其他的句柄类型。
  • 相关阅读:
    HashMap按键排序和按值排序
    LeetCode 91. Decode Ways
    LeetCode 459. Repeated Substring Pattern
    JVM
    LeetCode 385. Mini Parse
    LeetCode 319. Bulb Switcher
    LeetCode 343. Integer Break
    LeetCode 397. Integer Replacement
    LeetCode 3. Longest Substring Without Repeating Characters
    linux-网络数据包抓取-tcpdump
  • 原文地址:https://www.cnblogs.com/weekbo/p/8981258.html
Copyright © 2011-2022 走看看