C++ DLL header 包括

标签 c++ visual-studio dll header-files

我正在 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/

相关文章:

c++ - 解析器如何处理预处理器和条件编译?

c++ - 切换值范围

visual-studio - 为什么调试器不起作用

c# - 获取相对于 DLL 位置的绝对路径

c - R包卸载的时候一定要卸载动态库吗?

c++ - 内存分配

java - 检查字符串是否等价的查询

c++ - 对成员 `...' 的请求在 g++ 中不明确

database - 如何在 SQL Server CE(精简版)数据库中创建外键关系?

c# - 如何使用 C# 4.0 编译器让 MonoDevelop 以 .NET 2.0 框架为目标?