HINSTANCE数据类型
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
在看《 WINDOWS程序设计 》过程中,对于HINSTANCE的理解很重要,网上多数说其是一个整型变量,其实是不对的。http://furzoom.com/
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中句柄多被这种方式进行定义。
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
分类:
windows
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 中如何实现缓存的预热?