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程序设计枫竹梦

posted @   枫竹梦  阅读(5796)  评论(4编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示