您可以为一个DLL创建多个头文件吗?您可以合并头文件吗?

时间:2019-04-27 11:16:28

标签: c++ dll header-files

背景:我以Euler项目为借口来测试各种C ++功能并发现我的知识上的漏洞。我有一个创建可解决各种数学问题的可执行文件的项目。它变得笨拙,我将问题分解为单独的可执行文件。许多问题中都重复使用了许多数学函数。

首先:我想使用数学助手功能创建DLL文件。与其为整个dll提供一个单独的mathhelp.h文件,不如让我有几个单独的.h文件,例如primes.hcartesian.h等/它们各自提供对dll中单独命名空间的访问。

这可能吗?

第二:另外,我要做,对于那些足够大的项目,他们只需要一个mathhelp.h文件,它们只需要访问每个帮助程序函数,而无需包括五十个单独的头文件。如何做到这一点的答案是:

How to export multiple header files as a single header file in C++?

但是该答案给了我一个后续问题:如果在一个可执行项目中,我包含DLL项目中的以下标头:

#ifndef MATHHELP_H
#define MATHHELP_H
#include "primes.h"
#include "cartesian.h"
#endif

...如果我在可执行项目中也没有primes.h,该如何编译?预编译器会不会到达第一个#include并因为我在项目中没有primes.h的事实而感到窒息?

1 个答案:

答案 0 :(得分:1)

当您向用户提供c ++编译的API(假设它是在.dll文件中编译的)时,您应该在.dll文件旁边还提供.h文件(包含所有标头,用于编译.dll.lib文件(包含从。dll导出的符号)。 现在,假设您的用户具有可执行文件a.exe,并且想要使用编译后的API。通常,您将为他们提供一个看起来差不多的文件结构:

include / primes.h
          cartesian.h
          mathhelp.h

lib     / Api.lib

bin     / Api.dll

当外部可执行文件使用您的代码时,他将需要在编译过程中添加外部标志,例如:-I/pathToInclude -L/PathToLib -l/yourLibrary(为此您需要检查确切的sintax)。 在您的代码中,您将具有以下内容:

#ifndef MATHHELP_H
#define MATHHELP_H
#include <primes.h>
#include <cartesian.h>
#endif

在这种情况下,编译器将首先在当前目录中查找(他不会找到标头),然后在-I标志指定的文件夹中(他将在其中找到标头)。