“;手柄;关于DLL
本文关键字:DLL 关于 手柄 | 更新日期: 2023-09-27 18:26:12
最近我一直在把DLL中的函数导入到我的C#项目中,玩得很开心。
疑难解答错误我经常偶然发现包含以下内容的解释:"DDL或句柄"、"DLL的句柄"等等。我很难理解人们所说的"把手"到底是什么意思。
无论如何,我都试图阅读不同的文章,根据上下文来理解,但也没有成功。
如能简单解释,不胜感激!
来自维基百科关于"句柄(计算)"的文章:
句柄是对资源的抽象引用
基本上就是这样。在Windows操作系统(和其他操作系统)中,如果你打开一个文件,可能会分配很多内部数据结构(例如当前文件指针、指向文件系统节点的链接、预取的数据缓冲区等),但你永远无法直接访问这些数据结构;您从API(例如CreateFile
)得到的只是一个句柄—通常是一个不透明的整数。这里的"不透明"意味着这个整数对您来说没有任何意义,只是您可以将其交回操作系统API函数以识别关联的文件。
您可以想象,操作系统保留了一个内部映射表,其中每个句柄(整数)都与相应的内部资源和数据结构相关联。因此,使用句柄,操作系统可以链接到其内部的、不可见的记账结构。
"关闭"或"释放"句柄意味着您告诉操作系统不再需要与句柄(整数值)关联的资源,并且操作系统可以释放与其关联的所有内部数据结构(包括句柄!)。
C和POSIX库函数有一些非常相似的东西:当您open
文件时,您会得到一个int
;或者从fopen
返回FILE*
。两者都是非常不透明的值,除了将它们用于进一步的系统调用之外,您什么都不能做。从概念上讲,它与"文件句柄"是一样的。
句柄通常以所代表的资源命名;例如,"文件句柄"是对文件的引用,"互斥句柄"是指对互斥的引用,而"DLL句柄"则是指加载到进程地址空间中的DLL;等等
像Windows中的其他句柄类型一样的DLL句柄是由各种WIN32 API调用返回的不透明对象。
HANDLE
(在C语言头中定义)是一个void*
,意义不大。
操作系统内部存储与DLL相关的元数据,句柄是找到它的关键。
它也可能是某个数组或哈希表的索引。
微软可以改变幕后的事情,程序不会受到影响。例如,在Windows 7中的HANDLE可以是一个整数,在Windows 8中,它可以是某种容器的地址。