【问题标题】:What does `dll exporting/importing` mean?`dll 导出/导入` 是什么意思?
【发布时间】:2010-01-30 03:35:58
【问题描述】:

我对这个术语很困惑。在 dll 的上下文中,我绝对不喜欢 export 这个词。原因只是因为,我不明白它是什么。我也不知道去哪里找。

在很多场合都会用到。

  • 从 DLL 导出
  • 从共享库中导出表
  • dll 导出的函数。

谁能解释一下。这是什么意思?在任何其他情况下,它的含义如何变化?什么是导出表?是否像 PE/ELF 文件中的 .text/.bss/.data 部分?

为什么我从未听说过 dll 导入?如果存在这种情况。什么时候使用。如果不是太多,一个简单的例子也很好。

请澄清,我恳请大家使用简单的术语。我已经很困惑了。

【问题讨论】:

  • 事实上,C# P/Invoke 使用 [DllImport] 属性将函数签名标记为从给定 DLL 导入。

标签: dll


【解决方案1】:

当一个函数暴露给其他程序使用时,它是从 dll 中导出的。 dll 的导出表 是公开的函数列表以及它们可用的地址。通常,一个 dll 包含一些导出供公共使用的函数,以及其他不导出的函数——它们不能被其他 dll 或程序使用普通方法调用,但它们可以在 dll 内部调用。

您不经常谈论“dll 导入”,因为 dll 导入不是一个单独的过程。当您链接到 dll 时,该 dll 导出的每个函数都可供您的 dll 使用,但是为了链接到 dll,您通常需要一个 .h 文件来提供声明,以及一个 .lib 文件来提供存根导出函数的指针。这两件事共同构成了 dll import。但是,可以通过使用 LoadLibraryGetProcAddress 函数(相当于 POSIX dlopendlsym)来使用 dll 函数而不使用这些函数。

【讨论】:

  • The export table of a dll is the list of functions which are exposed and the addresses at which they are available. 这不是叫symbol table吗?
  • 导出表是符号表的子集。完整的符号表(例如用于调试的符号表)将包括内部函数、变量名和其他未导出的内容。
  • 导出表是二进制映像的特定操作系统支持的功能,允许运行时链接。所以它是一种非常特殊的符号表。
猜你喜欢
  • 2010-12-28
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2015-10-17
相关资源
最近更新 更多