我正在 Visual Studio 中创建一个 DLL。
我有 3 个自己的头文件,它们包含在 DLL 的头文件中。 一旦在 DLL 中编译,我想丢弃这 3 个头文件。
我尝试了很多方法来实现这一目标,但效果不佳。当我从项目中删除 3 个头文件时,出现头文件丢失的错误。编译并创建 DLL。
DLL.h :
#ifndef DLL_H
#define DLL_H
#include "header1.h"
#include "header2.h"
#include "header3.h"
#endif
我在 main.cpp 中包含了 DLL.h 以使用 DLL 和包含的头文件。
我还创建了一个 DLL.cpp,但这个文件是空的。
如何在 Visual Studio 中设置可以从 DLL 识别头文件但头文件不存在的文件或设置?
最佳答案
如果这些 header 与 DLL 导出的 API 无关,则不应将它们包含在 DLL header 文件中。 如果你真的想这样做,你可以用预处理器隐藏它们。
#ifndef DLL_H
#define DLL_H
// You can set BUILDING_DLL=1 in only DLL project,
// I assume that you already have such variable to determine
// whenever to use __declspec(dllexport) or __declspec(dllimport)
#if BUILDING_DLL
#include "header1.h"
#include "header2.h"
#include "header3.h"
#endif
#endif
但我鼓励您验证是否需要它。它会在没有这些 header 的情况下编译吗?如果可以,您可以简单地删除它们并仅包含在 cpp 文件中。否则,您将无法删除它们,因为一旦您想要链接到 DLL,编译器就必须知道来自此 header 的 API 和 ABI。例如。如果声明了某种用作函数参数的类型,编译器必须知道这种类型。
关于C++ DLL header 包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45630571/