C/C++ 标头、dll 和导出

C/C++ header, dll, and exports

本文关键字:dll C++ 标头      更新时间:2023-10-16

我试图理解标题和导出之间的关系。给定一个像dnsapi.dll这样的 dll .它导出 254 个符号,主要是函数。例如,您可以使用依赖性walker进行检查。

然后我们有windns.h,包含大约 50 个函数,请参阅 msdn。

问题:

  • 为什么windns.h不包含dnsapi.dll导出的所有 254 个元素?
  • 如果 .dll 和 .h 文件之间没有 1:1 映射,如何找到给定 dll 的所有所属 .h 文件?
  • 为什么dnsapi.dll导出函数/符号,而不是 包含在windns.h中 ?是否可以在没有标题的情况下使用这些导出的函数?

为什么 windns.h 不包含导出的所有 254 个元素 DNSAPI.dll?

也许 dnsapi.dll 使用了其他标头来构建。例如,您可以在其中看到它还具有与套接字相关的功能。或者开发人员只是不想记录所有符号,一旦您在文档中找不到它。也有可能有些函数只供内部使用,也许一些签名定义是在源文件中做出的,一切皆有可能......

如果 .dll 和 .h 文件之间没有 1:1 映射,我该如何 找到所有给定DLL的.h文件?

好吧,除非在依赖项walker上获取这些符号名称,例如,在msdn上搜索,否则我看不到其他方法。所有函数都有一个"要求"部分,用于告知它使用哪个标头。您还可以使用记事本++在计算机上的SDK(Windows 工具包等(文件夹中搜索符号,例如,使用*.h筛选器。

是否可以使用这些导出 没有标题的函数?

一旦你知道什么是函数签名,就可以使用。然后,您可以安全地执行函数指针转换。