您可以为一个 DLL 创建多个 header 文件吗?您可以合并 header 个文件吗?
Can you create multiple header files for a DLL? Can you consolidate header files?
背景:我以 Project Euler 为借口来测试各种 C++ 功能并查找我的知识漏洞。我有一个项目可以创建一个可执行文件来解决各种数学问题。它变得笨拙,我将问题分解为单独的可执行文件。许多数学函数在一些问题中是 re-used。
首先:我想创建一个带有数学辅助函数的 DLL 文件。与其为整个 dll 提供一个 mathhelp.h
文件,我更愿意有几个单独的 .h
文件,例如primes.h
、cartesian.h
等/每个都提供对 dll 中单独命名空间的访问。
这可能吗?
其次: 另外,我 do 想要一个单独的 mathhelp.h
文件用于那些足够大的项目,他们只需要访问每个辅助函数不包括五十个单独的 headers。如何做到这一点的答案是:
但是这个答案给了我一个 follow-up 问题:如果在一个可执行项目中,我从 DLL 项目中包含以下 header:
#ifndef MATHHELP_H
#define MATHHELP_H
#include "primes.h"
#include "cartesian.h"
#endif
...如果我在可执行项目中也没有 primes.h
,那将如何编译? pre-compiler 不会到达第一个 #include
并因为我在项目中没有 primes.h
而窒息吗?
当您向用户提供编译 API 的 c++(假设它是在 .dll
文件中编译的)时,您应该在 .dll
文件旁边还提供 .h
文件(包含用于编译 .dll
的所有 header)和 .lib
文件(包含从 .dll
导出的符号)。
现在假设您的用户拥有可执行文件 a.exe
,并且想要使用您编译的 API。通常你会为他们提供一个看起来或多或少像这样的文件结构:
include / primes.h
cartesian.h
mathhelp.h
lib / Api.lib
bin / Api.dll
当外部可执行文件使用您的代码时,他需要在编译过程中添加外部标志,例如:-I/pathToInclude -L/PathToLib -l/yourLibrary
(您需要检查确切的语法)。
在你的代码中你会有这样的东西:
#ifndef MATHHELP_H
#define MATHHELP_H
#include <primes.h>
#include <cartesian.h>
#endif
在这种情况下,编译器将首先在当前目录中查找(他不会在其中找到 headers),然后在由 -I
标志指定的文件夹中查找(他将在其中找到找到你的 headers).
背景:我以 Project Euler 为借口来测试各种 C++ 功能并查找我的知识漏洞。我有一个项目可以创建一个可执行文件来解决各种数学问题。它变得笨拙,我将问题分解为单独的可执行文件。许多数学函数在一些问题中是 re-used。
首先:我想创建一个带有数学辅助函数的 DLL 文件。与其为整个 dll 提供一个 mathhelp.h
文件,我更愿意有几个单独的 .h
文件,例如primes.h
、cartesian.h
等/每个都提供对 dll 中单独命名空间的访问。
这可能吗?
其次: 另外,我 do 想要一个单独的 mathhelp.h
文件用于那些足够大的项目,他们只需要访问每个辅助函数不包括五十个单独的 headers。如何做到这一点的答案是:
但是这个答案给了我一个 follow-up 问题:如果在一个可执行项目中,我从 DLL 项目中包含以下 header:
#ifndef MATHHELP_H
#define MATHHELP_H
#include "primes.h"
#include "cartesian.h"
#endif
...如果我在可执行项目中也没有 primes.h
,那将如何编译? pre-compiler 不会到达第一个 #include
并因为我在项目中没有 primes.h
而窒息吗?
当您向用户提供编译 API 的 c++(假设它是在 .dll
文件中编译的)时,您应该在 .dll
文件旁边还提供 .h
文件(包含用于编译 .dll
的所有 header)和 .lib
文件(包含从 .dll
导出的符号)。
现在假设您的用户拥有可执行文件 a.exe
,并且想要使用您编译的 API。通常你会为他们提供一个看起来或多或少像这样的文件结构:
include / primes.h
cartesian.h
mathhelp.h
lib / Api.lib
bin / Api.dll
当外部可执行文件使用您的代码时,他需要在编译过程中添加外部标志,例如:-I/pathToInclude -L/PathToLib -l/yourLibrary
(您需要检查确切的语法)。
在你的代码中你会有这样的东西:
#ifndef MATHHELP_H
#define MATHHELP_H
#include <primes.h>
#include <cartesian.h>
#endif
在这种情况下,编译器将首先在当前目录中查找(他不会在其中找到 headers),然后在由 -I
标志指定的文件夹中查找(他将在其中找到找到你的 headers).