关于DLL的“句柄”的定义

时间:2014-10-11 16:40:59

标签: c# dll dllimport

最近我一直在愚弄将DLL中的函数导入到我的C#项目中,这很有趣。

排除错误我经常偶然发现包含以下内容的解释:“DDL或句柄”,“DLL句柄”等。 我很难通过“句柄”理解人们的意思。

我试图通过上下文来阅读不同的文章,但也没有成功。

非常感谢您的简要说明!

2 个答案:

答案 0 :(得分:0)

来自维基百科的"Handle (computing)"文章:

  

句柄是对资源的抽象引用。

这基本上就是它的全部内容。使用Windows操作系统(和其他),如果您打开文件,可能会分配许多内部数据结构(例如当前文件指针,文件系统节点的链接,预取数据缓冲区等。 ),但你永远不能直接访问这些;你将从API(例如CreateFile)获得的所有内容都是一个句柄 - 通常是一个不透明的整数。 "不透明"这意味着此整数对没有任何意义,除了您可以将其移回操作系统API函数以识别关联文件。

您可以想象操作系统保留一个内部映射表,其中每个句柄(整数)与相应的内部资源和数据结构相关联。因此,使用句柄,操作系统可以链接到其内部的,隐形的簿记结构。

"关闭"或者"发布"句柄意味着您告诉操作系统不再需要与句柄相关联的资源(整数值),并且操作系统可以释放与其关联的所有内部数据结构(包括句柄!)。

C和POSIX库函数有类似的东西:当你open个文件时,你会得到一个int;或者从fopen,您获得FILE*。两者都是不透明的值,除了将它们用于进一步的系统调用之外,您无法做任何事情。从概念上讲,它与"文件句柄"。

相同

句柄通常以代表的资源命名;例如a"文件句柄"是对文件的引用,"互斥句柄"是对互斥锁," DLL句柄"的引用。是对加载到进程中的DLL的引用'地址空间;等

答案 1 :(得分:0)

与Windows中的其他句柄类型一样的DLL句柄是各种WIN32 API调用返回的不透明对象。

HANDLE(在C语言标题中定义)是void*,并不意味着什么。

内部操作系统存储与DLL关联的元数据,句柄是查找它的关键。

它可能是某个数组或哈希表的索引。

微软可以改变幕后的内容,不会影响程序。例如。 Windows 7中的HANDLE可以是整数,而在Windows 8中,它可以是某种容器的地址。