无法从DLL打开包含文件

时间:2015-01-29 11:27:46

标签: c++ dll

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

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

这个.h文件在dll中使用,我认为通过引用dll我不应该直接包含这个文件... 不应该有一个dll具有它所需的所有文件"在它里面"?

2 个答案:

答案 0 :(得分:3)

  

dll是否应该拥有其所需的所有文件"在其内部"?

没有。 DLL包含机器代码。

.c.h文件之间的主要区别在于.c个文件包含代码.h个文件包含标题(即他们应该做的事情,尽管他们并没有受到约束)。您需要这些头文件,以便编译器知道DLL中要查找的内容。编译和链接程序后,不再需要头文件。

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

包含机器代码和标题的文件格式是可能的,但据我所知,不存在这样的格式,如果确实存在,那将非常糟糕,因为很多程序都意味着巨大可执行文件。

答案 1 :(得分:2)

不,因为:

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

要编译源代码,您需要:

  • #include头文件,以便其余代码知道DLL中存储的数据结构和函数签名是什么样的。
  • .lib文件等效的.a.dll文件相关联。

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