Windows API中的句柄(HANDLE)到底是什么?

Windows API中的句柄(HANDLE)到底是什么?学习过 Windows API 编程的开发者都知道 Windows API 中有很多奇怪的数据类型 比如 HANDLE 中文翻译为句柄 看看 Windows API 函数 CreateFile 返回一个 HANDLE 也就是返回了一个句柄 这让很多初学者摸

欢迎大家来到IT世界,在知识的湖畔探索吧!

学习过Windows API编程的开发者都知道,Windows API中有很多奇怪的数据类型,比如HANDLE,中文翻译为句柄,看看Windows API函数CreateFile

HANDLE CreateFile( LPCTSTR lpFileName, // file name DWORD dwDesiredAccess, // access mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD DWORD dwCreationDisposition, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to template file );

欢迎大家来到IT世界,在知识的湖畔探索吧!

返回一个HANDLE,也就是返回了一个句柄,这让很多初学者摸不着头脑,难以理解,其实这不能怪初学者,因为在Windows编程中,把HANDLE翻译为句柄,真是一个糟糕的翻译。

这个HANDLE到底是什么类型?原来是一个PVOID类型:

欢迎大家来到IT世界,在知识的湖畔探索吧!typedef PVOID HANDLE;

那PVOID到底又是什么类型呢?再进一步探究,原来是一个void类型指针:

typedef void * PVOID;

也就是说HANDLE是一个没有具体类型的指针,这样就可以方便转换成其他类型的指针。指针的大小一般和机器字长一样。

在32位系统中,HANDLE的大小是32位,也就是4个字节。

在64位系统中,HANDLE的大小是64位,也就是8个字节。

既然HANDLE的本质是一个指针,为什么要用typedef重新命名为handle呢?handle就是把手的意思,为什么把指针比喻为把手呢?你看看下面的图片就知道了,抽屉,窗户都有把手,用把手我们可以轻松打开或者关闭抽屉或者窗户。

Windows API中的句柄(HANDLE)到底是什么?

抽屉把手



欢迎大家来到IT世界,在知识的湖畔探索吧!

Windows API中的句柄(HANDLE)到底是什么?

窗户把手

Windows系统中有很多复杂的系统对象,通过Windows API调用可以获得这些系统对象的指针,再通过指针就能方便访问Windows系统资源,例如一个文件资源,线程资源等,这就好比通过把手打开或者关闭抽屉或者窗户。

那为什么国内翻译者把HANDLE翻译为句柄这个拗口难懂的翻译呢?因为他们懒惰。根据考证,句柄这个翻译最早来编译器设计理论领域的翻译,最早翻译HANDLE为句柄:

一个句型的最左直接短语称为该句型的句柄。

这个在编译器领域没有问题,可以理解。

但是后来的翻译者偷懒,遇到HANDLE就沿用编译器设计理论领域的翻译,完全不顾新的领域的实际情况,这才造成我们今天的困惑。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/100906.html

(0)
上一篇 5天前
下一篇 5天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信