你能为DLL创建多个头文件吗?你能整合头文件吗?

问题描述 投票:0回答:1

背景:我使用Project 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而窒息?

c++ dll header-files
1个回答
1
投票

当你向用户提供c ++编译的API时(假设它是在.dll文件中编译的)你应该在.dll文件旁边提供.h文件(包含用于编译.dll的所有头文件)和.libfiles(包含导出的文件)来自.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标志指定的文件夹中(他将找到您的标题)。

© www.soinside.com 2019 - 2024. All rights reserved.