无法从 DLL 打开包含文件

Cannot open include file from a DLL

所以,我制作了一个 dll,它编译得很好。 然后我引用了我在另一个项目中制作的这个dll并收到这个错误信息:

error C1083: Cannot open include file: 'openssl\ssl.h': No such file or directory

这个.h文件是在dll内部使用的,我认为通过引用dll我不应该直接包含这个文件... 一个 dll 不应该拥有其目的所需的所有文件 "inside it" 吗?

不,因为:

  • 一个 .dll 是一个 编译的二进制 文件,可以 dynamically loaded 运行时 .exe 个程序。
  • 一个 .h(或 .hpp)文件包含 源代码 函数原型或数据结构的定义 C/C++ 程序, 在编译.
  • 期间使用

要编译您的源代码,您需要:

  • #include 头文件,以便您的其余代码知道存储在 DLL 中的数据结构和函数签名是什么样的。
  • Link 与 .lib.a 文件等同于 .dll 文件。

如果一切顺利,编译过程生成的.exe文件将能够动态载入并使用存储在.dll文件中的(已编译)函数。

Shouldn't a dll have all the files needed for it's purpose "inside it"?

没有。 DLL 包含机器代码。

.c.h 文件之间的主要区别在于 .c 文件包含 Code.h 文件包含 Headers(也就是说,这是他们应该做的,尽管他们没有义务这样做)。您需要那些 header 文件,以便编译器知道要在 DLL 中查找什么。编译和链接程序后,不再需要 header 文件。

这就是为什么用 C 或 C++ 编写的非开源库的作者通常会提供预编译的二进制文件以及 header 文件。

包含机器代码和 headers 的文件格式是可能的,但据我所知,不存在这样的格式,如果存在,那将是非常糟糕的,因为对于很多程序来说,意思是 巨大 个可执行文件。