zoukankan      html  css  js  c++  java
  • HINSTANCE数据类型

    作者:马 岩Furzoom) (http://www.cnblogs.com/furzoom/
    版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。

    在看《 WINDOWS程序设计 》过程中,对于HINSTANCE的理解很重要,网上多数说其是一个整型变量,其实是不对的。http://furzoom.com/

    HINSTANCE定义

    HINSTANCE数据类型-枫竹梦

    通过查找HINSTANCE的定义有WINDEF.H中为:

    001
    DECLARE_HANDLE(HINSTANCE);

    猜测应该是一条宏定义,继续查看DECLARE_HANDLE()的定义,也在WINDEF.H中,如下:

    001
    002
    003
    004
    005
    006
    007
    008
    #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
    typedef HANDLE *PHANDLE;

    可以看出DECLARE_HANDLE()被定义在一个条件预定义中,那么条件是否成立呢,继续查找STRICT的定义,在WINDEF.H的开头下有如下:

    001
    002
    003
    004
    005
    006
    007
    008
    #ifndef _WINDEF_
    #define _WINDEF_
     
    #ifndef NO_STRICT
    #ifndef STRICT
    #define STRICT 1
    #endif
    #endif /* NO_STRICT */

    这样就知道STRICT是默认被定义的。

    接着看DECLARE_HANDLE()宏的定义,

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

    ##为字符连接,那么

    001
    DECLARE_HANDLE(HINSTANCE)

    等同于

    001
    struct HINSTANCE__ { int unused; }; typedef struct HINSTANCE__ *HINSTANCE;

    HINSTANCE是一个指针变量,指向HINSTANCE结构体,而结构体的中只一个int变量。在WINDOWS中句柄多被这种方式进行定义。

    来自:HINSTANCE数据类型WINDOWS程序设计枫竹梦

    作者:马 岩Furzoom) (http://www.cnblogs.com/furzoom/
    版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
  • 相关阅读:
    16:最长单词2
    18:Tomorrow never knows?
    备份裸设备上的数据文件
    几个Uboot命令
    Timus1132(二次剩余方程求解)
    Android 批量上传sd卡图片
    SVN:分支合并到主干
    Mac开发者必备实用工具推荐
    Solution for "De-serialization exception: Unable to find assembly xxxxx"
    UVA 10706 Number Sequence (找规律 + 打表 + 查找)
  • 原文地址:https://www.cnblogs.com/furzoom/p/hinstance.html
Copyright © 2011-2022 走看看